繁体   English   中英

Pickle,读入数据,不支持的pickle协议:3 python 2.7

[英]Pickle , read in data , unsupported pickle protocol: 3 python 2.7

初学者在这里,想要以文件结尾p读取数据。

我的代码看起来像这样:

import pickle

training_file = "/home/sk/CarND-Traffic-Sign-Classifier-Project/train.p"
testing_file = "/home/sk/CarND-Traffic-Sign-Classifier-Project/test.p"
with open(training_file, mode='rb') as f:
    train = pickle.load(f)
with open(testing_file, mode='rb') as f:
    test = pickle.load(f)

我收到以下错误:

ValueError:不支持的pickle协议:3

有人可以指出我如何解决它,无论是更改协议还是以其他方式读取数据?

当我使用python3创建一个pickle文件然后尝试在python2中加载它时有同样的问题。 尝试使用python3运行程序或尝试使用python2创建pickle文件。

Pickle使用不同的协议将您的数据转换为二进制流。

在python 2中有3种不同的协议(0,1,2),默认值为0.在python 3中有5种不同的协议(0,1,2,3,4),默认值为3.您必须指定python 3一个低于3的协议,以便能够在python 2中加载数据。您可以在调用pickle.dump时指定协议参数。

似乎这些文件是使用协议> = 3(可能是3)创建的。 因此,唯一的选择是将其加载到python 3中,然后使用较低的协议转储它。

显然pickle协议3用于任何python 3代码pickle对象。 你不能在python 2中使用协议3进行unpickle。你可以编写一个简短的python 3程序来加载它然后使用protocol = 2转储它。然后你可以在python 2中加载它们。

https://docs.python.org/2/library/pickle.html#usage

https://github.com/zopefoundation/zodbpickle

在Python2下,该软件包支持Python 2.7的pickle和cPickle模块,增加了对协议3操作码的支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM