Самый простой способ сохранить структуру данных в файл в python?
скажем, у меня есть что-то вроде этого:
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
какой самый простой способ progammatically получить это в файл, который я могу загрузить с python позже?
могу ли я как-то сохранить его как источник python (из скрипта python, а не вручную!), то import
позже?
или я должен использовать JSON или что-то еще?
7 ответов
использовать огурец модуль.
import pickle
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
afile = open(r'C:\d.pkl', 'wb')
pickle.dump(d, afile)
afile.close()
#reload object from file
file2 = open(r'C:\d.pkl', 'rb')
new_d = pickle.load(file2)
file2.close()
#print dictionary object loaded from file
print new_d
выбирай: Стандартная Библиотека Python-Сохранение Данных. Какой из них наиболее подходит, может варьироваться в зависимости от ваших конкретных потребностей.
pickle
, вероятно, самый простой и наиболее способный, поскольку "написать произвольный объект в файл и восстановить его" идет-он может автоматически обрабатывать пользовательские классы и циклические ссылки.
для лучшей производительности маринования (скорость и пространство) используйте cPickle
at HIGHEST_PROTOCOL
.
попробуйте модуль shelve, который даст вам постоянный словарь, например:
import shelve
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
shelf = shelve.open('shelf_file')
for key in d:
shelf[key] = d[key]
shelf.close()
....
# reopen the shelf
shelf = shelve.open('shelf_file')
print(shelf) # => {'qwerty': [4, 5, 6], 'abc': [1, 2, 3]}
JSON имеет недостатки, но когда он отвечает вашим потребностям, это также:
- прост в использовании
- входит в стандартную библиотеку как
json
модуль - интерфейс несколько похож на
pickle
, который может обрабатывать более сложные ситуации - редактируемый человеком текст для отладки, совместного использования и управления версиями
- действительный код на Python
- хорошо зарекомендовал себя в интернете (если ваш программа касается любого из этих доменов)
вы также можете взглянуть на база данных объектов Zope чем сложнее вы получаете: -) вероятно, перебор для того, что у вас есть, но он хорошо масштабируется и не слишком сложно использовать.
если вы хотите сохранить его в удобном для чтения формате JSON, используйте repr
для сериализации объекта и eval
десериализовать его.
repr(object) -> string
возвращает каноническое строковое представление объекта. Для большинства типов объектов
eval(repr(object)) == object
.
чтобы добавить к предыдущим предложениям, если вы хотите, чтобы формат файла был легко читаемым и изменяемым, вы также можете использовать YAML. Он очень хорошо работает для вложенных диктов и списков, но масштабируется для более сложных структур данных (т. е. с использованием пользовательских объектов), и его большой плюс в том, что формат читаем.