在python中将数据结构持久保存到文件的最简单方法?

时间:2009-06-26 04:22:40

标签: python file persistence

让我说我有这样的事情:

d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }

progammatically 最简单的方法是将它放入我以后可以从python加载的文件中?

我可以以某种方式将其保存为python源(在python脚本中,而不是手动!),然后import以后呢?

或者我应该使用JSON还是什么?

7 个答案:

答案 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,可以处理更复杂的情况
  • 用于调试,共享和版本控制的人工可编辑文本
  • 有效的Python代码
  • 在网络上建立良好(如果您的程序涉及任何域名)

答案 4 :(得分:4)

你也可能想看一下Zope's Object Database你得到的更复杂的东西:-)可能是你的东西有点过分,但它很好地扩展并且不太难用。

答案 5 :(得分:3)

如果要以易于阅读的类JSON格式保存,请使用repr序列化对象,并使用eval对其进行反序列化。

  

repr(object) -> string

     

返回对象的规范字符串表示形式。   对于大多数对象类型,eval(repr(object)) == object。   

答案 6 :(得分:2)

只是要添加到之前的建议,如果您希望文件格式易于阅读和修改,您还可以使用YAML。它对于嵌套的dicts和列表非常有效,但是对于更复杂的数据结构(即涉及自定义对象的数据结构)也可以进行扩展,并且它的重要优点是格式是可读的。

相关问题