簡體   English   中英

在python中將數據結構持久化到文件的最簡單方法?

[英]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]}

JSON有缺點,但是當它滿足你的需求時,它也是:

  • 使用簡單
  • 作為json模塊包含在標准庫中
  • 接口有點類似於pickle ,可以處理更復雜的情況
  • 用於調試、共享和版本控制的人工可編輯文本
  • 有效的 Python 代碼
  • 在網絡上建立良好(如果您的程序涉及該域中的任何一個)

你可能還想看看Zope 的對象數據庫,你越復雜:-) 可能對你擁有的東西來說太過分了,但它可以很好地擴展並且不太難使用。

只是為了補充之前的建議,如果您希望文件格式易於閱讀和修改,您也可以使用YAML 它非常適用於嵌套的字典和列表,但也適用於更復雜的數據結構(即涉及自定義對象的數據結構),它的一大優點是格式可讀。

如果您想以易於閱讀的類似 JSON 的格式保存它,請使用repr序列化對象並使用eval反序列化它。

repr(object) -> string

返回對象的規范字符串表示形式。 對於大多數對象類型, eval(repr(object)) == object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM