将字典保存到文件Python

Leo*_*eyu 3 python file-io serialization dictionary deserialization

说我有这样的字典:

Test = {"apple":[3,{1:1,3:5,6:7}],"banana":[4,{1:1,3:5,6:7,11:2}]}
Run Code Online (Sandbox Code Playgroud)

现在我想将这个字典保存到一个临时文件中,以便我以后可以重新构建字典.(我正在做外部排序XD)

任何善良的人都可以帮助我吗?我知道有一种方法可以用csv格式保存它,但这是一种特殊的字典.多谢.

Set*_*eth 6

pickle模块对于序列化 python 数据非常方便。它也可能是转储和重新加载 python 数据结构的最快方法。

>>> import pickle
>>> Test = {"apple":[3,{1:1,3:5,6:7}],"banana":[4,{1:1,3:5,6:7,11:2}]}
>>> pickle.dump(Test, open('test_file', 'w'))
>>> pickle.load(open('test_file', 'r'))
{'apple': [3, {1: 1, 3: 5, 6: 7}], 'banana': [4, {1: 1, 3: 5, 11: 2, 6: 7}]}
Run Code Online (Sandbox Code Playgroud)

  • 我很确定 json 更快。pickle 也会评估条目(在 unpickle 上),因此如果您正在腌制用户数据,则会涉及一些风险......为了速度,请参阅http://kovshenin.com/2010/pickle-vs-json-which-is-faster/ (2认同)

Mar*_*ins 5

为了将数据结构保存到文件,您需要决定序列化格式.序列化格式采用内存数据结构并将其转换为可写入文件的字节序列.将该字节序列转换回数据结构的过程称为反序列化.

Python为具有不同特征的seralization提供了许多选项.以下是两种常见的选择和权衡:

  • pickle使用紧凑的格式,几乎可以代表任何Python对象.但是,它特定于Python,因此只有Python程序可以(轻松地)稍后解码该文件.格式的细节也可能因Python版本而异,因此,只有在使用与创建它相同或更新版本的Python重新读取数据文件时,才最好使用pickle.Pickle能够处理递归数据结构.最后,pickle不适合读取其他可能的恶意程序提供的数据,因为解码pickle数据结构会导致任意代码在您的应用程序中运行,以便重建复杂的对象.

  • json使用人类可读的基于文本的格式,它只能表示一None小组数据类型:数字,字符串,布尔值,列表和字典.但是,它是一种标准格式,可以被许多其他编程语言中的等效库读取,并且从一个Python版本到另一个版本不同.JSON不支持递归数据结构,但从未知来源解码JSON对象通常是安全的,当然结果数据结构可能会占用大量内存.

在这两个模块中,该dump函数可以将数据结构写入文件,然后该load函数可以恢复它.不同之处在于写入文件的数据格式.