Наиболее эффективный способ обработки списков, сохраненных в файле python3

#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'