如果我想保存一个字典结构到一个文件中,然后直接从文件中读取这个字典,我有两种方法,但我不知道这两种方法之间的区别。有人能解释一下吗? 下面是一个简单的例子。假设这是我的字典:
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
第二种方法(用泡菜):
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
值,那么您依赖于这样一个事实:它的形状是正确的。你知道吗在某些情况下(例如浮点数,但也有更复杂的对象),您可能会丢失一些精度或信息。你知道吗
使用
repr
而不是str
可能会稍微改善这种情况,因为repr
应该以一种形式提供文本,这种形式在读回文本时可能会起作用(但没有任何保证)写入
pickle
d数据Pickle关心每一个细节,因此您将获得序列化的精确信息。你知道吗
这是相当显著的区别。你知道吗
使用其他序列化方法
就我个人而言,我更喜欢序列化成
json
或有时yaml
,因为这种形式的数据可读性好,可移植,甚至可以编辑。你知道吗序列化为JSON
对于json,它的工作方式如下:
序列化为YAML
使用YAML:
首先,请确保您安装了一些YAML库,例如:
就我个人而言,我一直都在安装它,因为我经常使用它。你知道吗
然后,脚本只改变了一点:
结论
对于相当简单的数据类型,上面描述的方法很容易工作。你知道吗
如果开始使用已定义类的实例,则需要正确定义 给定格式的加载器和序列化程序。描述这一点超出了这个问题的范围,但是 对于存在某种解决方案的所有情况(因为存在类型的值 无法可靠地序列化(如文件指针、数据库连接等)
相关问题 更多 >
编程相关推荐