0

我在文件中有一个 python 字典,格式如下:

(dp0 S'Test' p1 S'Test1' p2 sS'Test2' p3 S'Test2' p4 sS'Starspy' p5 S'SHSN4N' p6 s.

请参阅: 在 Python 中将字典保存到文件(替代泡菜)?

我想读回来。

根据链接中的问题,这是用pickle创建的。但是,当我尝试用 pickle 保存字典时,我获得的格式不对应。

例如,代码:

import pickle
mydict = {'a': 1, 'b': 2, 'c': 3}
output = open('myfile.dict', 'wb')
pickle.dump(mydict, output)
output.close()

生成一个包含内容的文件

€}q (X aqKX bqKX cqKu.

我可以读回它,但它没有我的文件格式(对应于嵌套字典)。所以,我有两个问题:

首先,如何编写格式为 ... (dp0 S'Test' p1 S'Test1' p2 sS'Test2' p3 S'Test2' p4 sS'Starspy' p5 S'SHSN4N' p6 s. 的文件?

其次,我怎样才能读取这种格式的文件?

4

3 回答 3

2

如果你想要可读的字典,那么使用它内置在 python 中的json,输出非常像字典。

于 2017-09-30T22:25:00.910 回答
1

pickle模块文档中回答了这个问题: https ://docs.python.org/2/library/pickle.html#data-stream-format

目前有 3 种不同的协议可用于酸洗。

协议版本 0 是原始的 ASCII 协议,向后兼容早期版本的 Python。

协议版本 1 是旧的二进制格式,它也与早期版本的 Python 兼容。

协议版本 2 是在 Python 2.3 中引入的。它提供了更有效的新型类的酸洗。

无论您在开始时显示什么,它都是协议版本 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?

于 2017-09-30T22:22:57.663 回答
0

我遇到的问题是版本问题。我使用的是版本 3,它适用于版本 2。

在这种情况下,我可以创建一个具有我想要读取的文件中的格式的文件,我现在可以读取它。

于 2017-10-01T09:07:33.010 回答