如果我想将一个Dictionary结构保存到一个文件中,然后直接从文件中读取这个Dictionary,我有两种方法,但我不知道这两种方法之间的区别。有人能解释一下吗? 这是一个简单的例子。假设这是我的字典:
D = {'zzz':123,
'lzh':321,
'cyl':333}
第一种保存到文件的方法:
with open('tDF.txt','w') as f: # save
f.write(str(D) + '\n')
with open('tDf.txt','r') as f:
Data = f.read() # read. Data is string
Data = eval(Data) # convert to Dictionary structure format
第二种方法(使用pickle):
import pickle
with open('tDF.txt','w') as f: # save
pickle.dump(D,f)
with open('tDF.txt','r') as f:
D = pickle.load(f) # D is Dictionary structure format
我认为第一种方法很简单。有什么区别?
谢谢!
最佳答案
编写str
值表示
如果您写入数据的 str
值,您就可以相信它的形状正确。
在某些情况下(例如 float ,但也包括更复杂的对象),您会丢失一些精度或信息。
使用 repr
而不是 str
可能会稍微改善情况,因为 repr
应该以表单形式提供文本,即在读回它的情况下可能会起作用(但没有任何保证)
写入pickle
数据
Pickle 会照顾到每一点,因此您将获得序列化的精确信息。
这是相当显着的差异。
使用其他序列化方法
就我个人而言,我更喜欢序列化为 json
或有时 yaml
,因为这种形式的数据具有良好的可读性、可移植性,甚至可以编辑。
序列化为 JSON
对于 json,它的工作方式如下:
import json
data = {"a", "aha", "b": "bebe", age: 123, num: 3.1415}
with open("data.json", "w") as f:
json.dump(data, f)
with open("data.json", "r") as f:
readdata = json.load(data, f)
print readdata
序列化为 YAML
使用 YAML:
首先确保您安装了一些 YAML 库,例如:
$ pip install pyyaml
就我个人而言,我一直都安装它,因为我经常使用它。
然后,然后脚本只改变一点:
import yaml
data = {"a", "aha", "b": "bebe", age: 123, num: 3.1415}
with open("data.yaml", "w") as f:
yaml.dump(data, f)
with open("data.yaml", "r") as f:
readdata = yaml.load(data, f)
print readdata
结论
对于相当简单的数据类型,上述方法很容易工作。
如果您开始使用已定义的类的实例,则需要正确定义 给定格式的加载器和序列化器。描述这一点超出了这个问题的范围,但它 对于存在某种解决方案的所有情况来说绝对是可能的(因为存在值的类型,其中 不可能可靠地序列化,如文件指针、数据库连接等)
关于python - `str` 和 `pickle` 字典值序列化方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24821054/