反序列化“pickle”文件
Posted
技术标签:
【中文标题】反序列化“pickle”文件【英文标题】:Deserialisation "pickle" file 【发布时间】:2016-08-27 17:56:00 【问题描述】:我的代码是:
import _pickle
with open('items_10000_matrix.pickle', 'rb') as f:
data_new = _pickle.load(f)
但是出现错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 212: ordinal not in range(128)
我正在使用 Windows 10 + python 3.5 和用于 python 的 VS 工具。
【问题讨论】:
您说执行import pickle
失败 - 它究竟是如何失败的?你不应该/不需要使用_pickle
...
@NinjaPuppy 对不起,它不再失败了,那只是我以前的操作......
@martineau 抱歉,但是:需要一个类似字节的对象,而不是 'str'
好的,试试_pickle.load(f, encoding='bytes')
。
@Vladislav:pickle 文件唯一真正有用的是存储可以稍后读取的腌制数据。您可以将多个项目存储在一个项目中,但除非它们都在某种容器对象中,例如列表或字典,否则您必须分别解开(加载)每个项目。有关示例,请参阅此answer of mine。
【参考方案1】:
尝试使用_pickle.load(f, encoding='bytes')
。
顺便说一句,在 Python 3 中,没有理由显式导入 _pickle
而不是 pickle
,因为如果可用,它将自动切换到 C 版本。请参阅问题What difference between pickle and _pickle in python 3?的已接受答案
【讨论】:
Vladislav:我觉得不接受我的回答有点不公平。如果您没有明确声明您使用的是 python 3.5(并标记了您的问题 Python-3.x),我可能会建议切换到 Python 2。有人能够像那样轻松地从一个切换到另一个,这也是相当不寻常的。【参考方案2】:有人告诉我使用 python 2 而不是 python 3,它起作用了。还是不知道python3的解决方案
【讨论】:
以上是关于反序列化“pickle”文件的主要内容,如果未能解决你的问题,请参考以下文章