ValueError:サポートされていないpickleプロトコル:3、python2 pickleはpython 3 pickleによってダンプされたファイルをロードできませんか?


101

私はピクルスを使用してpython 3でファイルをダンプし、ピクルスを使用してpython 2でファイルをロードすると、ValueErrorが表示されます。

では、python 2 pickleはpython 3 pickleによってダンプされたファイルをロードできませんか?

欲しいなら?実行する方法?


5
あなたは既に書か漬けファイルで立ち往生している場合は、チェックアウト:stackoverflow.com/questions/34571063/...
rysqui

回答:


158

Python 3では、より低いプロトコル番号でピクルスデータを書き込む必要があります。Python3は、番号付きの新しいプロトコルを導入し3(デフォルトで使用します)、2Python 2で読み取れる値に切り替えます。

protocolパラメータを確認してくださいpickle.dump。結果のコードは次のようになります。

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

何もありませんprotocolで、パラメータpickle.loadのでpickle、ファイルからプロトコルを決定することができますが。


54

Pickleは、別のものprotocolsを使用してデータをバイナリストリームに変換します。

3Python 2でデータをロードできるようにするには、Python 3でより低いプロトコルを指定する必要があります。protocolを呼び出すときにパラメーターを指定できますpickle.dump


10
将来の参考のために5、以前のバージョンと互換性のないプロトコルがPython 3.8にも導入されたようです。
Farzad Abdolhosseini

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.