以可读格式在Python中pickle字典

问题描述 投票:0回答:3

给定

我的文件中有一个 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.

我可以正常读回它,但它没有我的文件的格式(对应于嵌套字典)。

问题

我有两个问题:

  1. 如何编写给定格式(格式A)的文件?
  2. 如何读取该格式的文件?
python dictionary pickle
3个回答
2
投票

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


1
投票

问题在

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?


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.