假设我有这样的东西:
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
以编程方式将其放入稍后可以从 python 加载的文件中的正确方法是什么?
我可以以某种方式将其保存为 python 源代码(在 python 脚本中,而不是手动!),然后import
稍后再保存吗?或者我应该使用 JSON 还是什么?
pickle 模块。
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 标准库 - 数据持久性。 哪一种最合适可能会根据您的具体需求而有所不同。 就“将任意对象写入文件并恢复它”而言,
可能是最简单、最有能力的——它可以自动处理自定义类和循环引用。 为了获得最佳酸洗性能(速度和空间),请在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
模块包含在标准库中
pickle
,可以处理更复杂的情况
YAML。它对于嵌套字典和列表非常有效,但也可以扩展到更复杂的数据结构(即涉及自定义对象的数据结构),其最大优点是格式可读。
repr
序列化对象并使用
eval
反序列化它。
返回对象的规范字符串表示形式。 对于大多数对象类型,
repr(object) -> string
eval(repr(object)) == object
。