我使用pickle在python 3上转储文件,我使用pickle在python 2上加载文件,出现ValueError。
那么,python 2 pickle无法加载python 3 pickle转储的文件?
如果我想要它?怎么办?
答案 0 :(得分:126)
您应该在Python 3中使用较低的协议编号编写pickle数据.Python 3引入了一个编号为3
的新协议(并将其用作默认值),因此切换回{{1}的值这可以被Python 2读取。
检查pickle.dump
中的2
参数。生成的代码将如下所示。
protocol
pickle.load
中没有pickle.dump(your_object, your_file, protocol=2)
参数,因为protocol
可以从文件中确定协议。
答案 1 :(得分:44)
Pickle使用不同的protocols
将您的数据转换为二进制流。
在python 2中有3 different protocols(0
,1
,2
),默认为0
。
在python 3中有5 different protocols(0
,1
,2
,3
,4
)和默认值是3
。
您必须在python 3中指定低于3
的协议才能在python 2中加载数据。您可以在调用pickle.dump
时指定protocol
参数。< / p>