1. ホーム
  2. Python

Python - pickleファイルの異なるPython環境への変換

2022-02-20 07:43:38
<パス

Python - pickleファイルの異なるPython環境への変換

pickleファイルを読み込む際、python2環境から読み込むと、pickleライブラリがpython2に格納されているのかpython3に格納されているのかが最初分からないため、エラーが発生します。

import pickle
testpkl = pickle.loads(open("test.pickle", "rb").read())

トレースバック (最も最近の呼び出し):
ファイル "", 行 1, in
ファイル "/usr/lib/python2.7/pickle.py", 行 1382, in loads

return Unpickler(file).load()


ファイル "/usr/lib/python2.7/pickle.py", 行 858, in load
ディスパッチ キー
ファイル "/usr/lib/python2.7/pickle.py", 行 886, in load_proto
raise ValueError, "サポートされていない pickle プロトコル: %d" % proto
ValueError: pickleプロトコルがサポートされていません。3

その理由は test.pickle はpython3環境で生成されるため、python2での読み込みと互換性がありません。

解決策

#! /usr/bin/env python3
import pickle

import pickle
testpkl = pickle.loads(open("test.pickle", "rb").read())

pickle.dump(w, open("testpkl_py2.pkl","wb"), protocol=2)

python2環境での読み込み testpkl_py2.pkl で、動作します。