Вопрос по file, python, persistence – Самый простой способ сохранить структуру данных в файл в Python?
Допустим, у меня есть что-то вроде этого:
<code>d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] } </code>
Какой самый простой способprogammatically получить это в файл, который я могу загрузить из Python позже?
Могу ли я как-то сохранить его как исходный код Python (из сценария Python, а не вручную!), Затемimport
это позже?
Или я должен использовать JSON или что-то?
Использоватьсоленый огуре модуль.
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
вHIGHEST_PROTOCOL
.
который даст вам постоянный словарь, например:
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 чем сложнее вы получаете :-) Вероятно, излишне для того, что у вас есть, но оно хорошо масштабируется и не слишком сложно в использовании.
ON, используйтеrepr
для сериализации объекта иeval
чтобы десериализовать это.
repr(object) -> string
Возвратите каноническое строковое представление объекта. Для большинства типов объектовeval(repr(object)) == object
.
если вы хотите, чтобы формат файла был легко читаемым и изменяемым, вы также можете использовать YAML. Он очень хорошо работает для вложенных диктовок и списков, но масштабируется и для более сложных структур данных (т. Е. С участием пользовательских объектов), и его большой плюс в том, что формат читабелен.