#json #python-3.x #shelve #pprint
#json #python-3.x #отложить #pprint
Вопрос:
Я искал информацию в Google и stackoverflow, но я не нашел хорошего решения.
Мне нужно обработать список, добавить элементы, удалить элементы… но сохраненный в файле. Это делается для того, чтобы избежать потери списка при завершении выполнения, потому что мне нужно периодически выполнять мой скрипт на Python. Вот альтернативы, которые я нашел, но у них есть некоторые проблемы
- Модуль Shelve: не могу найти, как удалить элемент в списке (например,
list.pop()
) вместо удаления всего списка. pprint.pformat()
: чтобы изменить информацию, мне нужно удалить весь документ и сохранить измененную информацию, что очень неэффективно.- json: tediuos только для списка и, похоже, не решает мою проблему
Итак, какой лучший способ обработки списка, который делает все так же просто, как mylist.pop()
эффективное сохранение изменений в файле?
Комментарии:
1. Вы можете попробовать
pickle
, но если изменения происходят часто, возможно, вам следует использовать базу данных, а не файл.2. В этом и проблема, изменения происходят с частотой 10 в час. Я не думал об использовании базы данных, хороший момент
3. открыть файл, прочитать в списке, управлять списком, сохранить список в файле. в зависимости от размера файла занимает пару мс или дольше. Смотрите docs.python.org/3/tutorial /… — вы можете сохранить свой список, используя csv-модуль, если хотите, — который также обрабатывает текстовые строки, исключающие текстовые строки.
4. ps: — хранение данных в файле и выполнение противоречат друг другу. Файлы — это потоки, вам нужно искать, ввод-вывод с самого начала медленный. 10 раз в минуту в час, о каком размере списков вы говорите? 1k элементов? 100 тыс. элементов? миллионы?
5. Не так много, 30 тыс. элементов. Я прочитаю список, изменю его и сохраню снова, изменяя свой код, чтобы делать это только один раз в день. Использование базы данных усложнит проект больше, чем это необходимо. Спасибо всем, я думаю, что могу закрыть вопрос, поскольку были представлены все альтернативы, с плюсами и минусами
Ответ №1:
Поскольку на этот вопрос никогда раньше не было ответа, вот эффективный способ. Пакет pysos может обрабатывать списки, сохраненные на диске, со вставками / удалениями в постоянное время.
pip install pysos
Пример кода:
import pysos
db = pysos.List('somefile')
db.append('saved in the file 0')
db.append('saved in the file 1')
db.append('saved in the file 2')
print(db[1]) # => 'saved in the file 1'
del db[1]
print(db[1]) # => 'saved in the file 2'