反序列化“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”文件的主要内容,如果未能解决你的问题,请参考以下文章

Python之路-json和pickle序列化/反序列化

Python序列化与反序列化pickle

python序列化与反序列化——json与pickle

Python库:序列化和反序列化模块pickle介绍

21天学习python编程_pickle模块序列化与反序列化

21天学习python编程_pickle模块序列化与反序列化