[英]Easiest way to persist a data structure to a file in python?
假設我有這樣的事情:
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
以編程方式將其放入我稍后可以從 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
可能是最簡單和最強大的——它可以自動處理自定義類和循環引用。
為了獲得最佳酸洗性能(速度和空間),請在HIGHEST_PROTOCOL
處使用cPickle
。
試試 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]}
你可能還想看看Zope 的對象數據庫,你越復雜:-) 可能對你擁有的東西來說太過分了,但它可以很好地擴展並且不太難使用。
只是為了補充之前的建議,如果您希望文件格式易於閱讀和修改,您也可以使用YAML 。 它非常適用於嵌套的字典和列表,但也適用於更復雜的數據結構(即涉及自定義對象的數據結構),它的一大優點是格式可讀。
如果您想以易於閱讀的類似 JSON 的格式保存它,請使用repr
序列化對象並使用eval
反序列化它。
repr(object) -> string
返回對象的規范字符串表示形式。 對於大多數對象類型,
eval(repr(object)) == object
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.