将字典保存到文件 Python
假设我有一个这样的字典:
Test = {"apple":[3,{1:1,3:5,6:7}],"banana":[4,{1:1,3:5,6:7,11:2}]}
现在我想把这个字典保存到一个临时文件里,这样我以后可以再把它恢复出来。(我正在做外部排序,哈哈)
有没有好心人能帮我一下?我知道有办法把它保存成csv格式,但这个字典是特别类型的。非常感谢!
3 个回答
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}]}
为了把一个数据结构保存到文件里,你需要选择一种序列化格式。序列化格式的作用是把内存中的数据结构转换成一串字节,这样就可以写入文件。把这串字节再转换回数据结构的过程叫做 反序列化。
Python 提供了几种不同的序列化选项,每种都有自己的特点。这里有两个常见的选择和它们的利弊:
pickle 使用了一种紧凑的格式,可以表示几乎所有的 Python 对象。不过,它是专门为 Python 设计的,所以只有 Python 程序才能(比较容易地)解码这个文件。而且,这种格式在不同的 Python 版本之间可能会有所不同,所以最好在用相同或更新版本的 Python 重新读取数据文件时使用 pickle。pickle 可以处理递归数据结构。最后,pickle 不适合用来读取其他可能有恶意程序提供的数据,因为解码一个 pickle 数据结构可能会在你的应用程序中运行任意代码,以重建复杂的对象。
json 使用一种人类可读的文本格式,只能表示一小部分数据类型:数字、字符串、
None
、布尔值、列表和字典。不过,它是一种标准格式,可以被许多其他编程语言中的相应库读取,并且在不同的 Python 版本之间不会变化。JSON 不支持递归数据结构,但从未知来源解码 JSON 对象通常是安全的,当然,结果的数据结构可能会占用很多内存。
在这两个模块中,dump
函数可以把数据结构写入文件,而 load
函数可以稍后恢复它。它们的区别在于写入文件的数据格式。