4

假设我有一本这样的字典:

Test = {"apple":[3,{1:1,3:5,6:7}],"banana":[4,{1:1,3:5,6:7,11:2}]}

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

有好心人能帮帮我吗?我知道有一种方法可以将其保存为 csv 格式,但这是一种特殊的字典。多谢。

4

3 回答 3

6

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

Python 提供了许多具有不同特征的序列化选项。以下是两种常见的选择及其权衡:

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

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

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

于 2013-03-17T19:00:29.667 回答
4

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}]}
于 2013-03-17T18:57:14.727 回答
0

对我来说,显然最好的序列化程序是msgpack

http://jmoiron.net/blog/python-serialization/

与其他方法相同。

于 2013-03-17T22:38:48.033 回答