让我说我有这样的事情:
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
progammatically 最简单的方法是将它放入我以后可以从python加载的文件中?
我可以以某种方式将其保存为python源(在python脚本中,而不是手动!),然后import
以后呢?
或者我应该使用JSON还是什么?
答案 0 :(得分:58)
使用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
答案 1 :(得分:12)
选择:Python Standard Library - Data Persistance。哪一个最合适可能因您的具体需求而异。
pickle
可能是最简单和最有能力的“将任意对象写入文件并恢复它”,它可以自动处理自定义类和循环引用。
要获得最佳的酸洗性能(速度和空间),请在cPickle
使用HIGHEST_PROTOCOL
。
答案 2 :(得分:7)
尝试搁置模块,它将为您提供持久字典,例如:
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]}
答案 3 :(得分:4)
JSON有错误,但当它满足您的需求时,它也是:
json
module pickle
,可以处理更复杂的情况答案 4 :(得分:4)
你也可能想看一下Zope's Object Database你得到的更复杂的东西:-)可能是你的东西有点过分,但它很好地扩展并且不太难用。
答案 5 :(得分:3)
如果要以易于阅读的类JSON格式保存,请使用repr
序列化对象,并使用eval
对其进行反序列化。
repr(object) -> string
返回对象的规范字符串表示形式。 对于大多数对象类型,
eval(repr(object)) == object
。
答案 6 :(得分:2)
只是要添加到之前的建议,如果您希望文件格式易于阅读和修改,您还可以使用YAML。它对于嵌套的dicts和列表非常有效,但是对于更复杂的数据结构(即涉及自定义对象的数据结构)也可以进行扩展,并且它的重要优点是格式是可读的。