我的文件中有一个 python 字典,格式如下所示 我想再读一遍。
来自马特A:
(dp0
S'Test'
p1
S'Test1'
p2
sS'Test2'
p3
S'Test2'
p4
sS'Starspy'
p5
S'SHSN4N'
p6
s.
文件内容已创建,并用 pickle 保存,请参阅 在 Python 中将字典保存到文件(替代 pickle)?.
当我尝试用 pickle 保存字典时,我获得的格式不对应。
例如代码:
import pickle
mydict = {'a': 1, 'b': 2, 'c': 3}
output = open('myfile.dict', 'wb')
pickle.dump(mydict, output)
output.close()
生成包含以下内容的文件(格式 B):
€}q (X aqKX bqKX cqKu.
我可以正常读回它,但它没有我的文件的格式(对应于嵌套字典)。
我有两个问题:
如果你想要可读的字典,那么使用 json 它内置于 python 中,输出非常像字典。
问题在
pickle
模块文档中得到解答:https://docs.python.org/2/library/pickle.html#data-stream-format
目前有 3 种不同的协议可用于 酸洗。
协议版本0是原始的ASCII协议,是向后的 与早期版本的 Python 兼容。
协议版本 1 是 旧的二进制格式也与早期版本兼容 Python。
Python 2.3 中引入了协议版本 2。它提供 新式类的酸洗更加高效。
无论你在开始时显示什么,它都是协议版本0,并且是默认的。最后 — 二进制协议版本 1 或 2。
只需指定协议版本号:
>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'))
>>> file('f.txt', 'rt').read()
"(dp0\nS'hello'\np1\nS'world'\np2\ns."
>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'), 2)
>>> file('f.txt', 'rt').read()
'\x80\x02}q\x00U\x05helloq\x01U\x05worldq\x02s.'
>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'), 1)
>>> file('f.txt', 'rt').read()
'}q\x00U\x05helloq\x01U\x05worldq\x02s.'
PS:为什么不直接使用可读的格式,例如json?
我遇到的问题是版本问题。我使用的是版本 3,它适用于版本 2。
在这种情况下,我可以使用我想要读取的文件中的格式创建一个文件,并且现在可以读取它。