104

我使用pickle在python 3上转储文件,并使用pickle在python 2上加载文件,出现ValueError。

那么,python 2 pickle 无法加载 python 3 pickle 转储的文件?

如果我想要?怎么做?

4

2 回答 2

163

您应该在 Python 3 中使用较低的协议编号编写腌制数据。Python 3 引入了一个带有该编号的新协议3(并将其用作默认值),因此切换回2Python 2 可以读取的值。

检查中的protocol参数pickle.dump。您生成的代码将如下所示。

pickle.dump(your_object, your_file, protocol=2)

因为可以从文件中确定协议,所以没有protocol参数。pickle.loadpickle

于 2014-09-15T08:29:06.197 回答
56

Pickle 使用不同protocols的方法将您的数据转换为二进制流。

您必须在 python 3 中指定低于的协议3才能在 python 2 中加载数据。您可以protocol在调用时指定参数pickle.dump

于 2014-09-15T08:32:18.287 回答