Python 3 Python 2で機能するコードを使用して、pickleファイルを開こうとしていますが、エラーが発生しています。コードは次のとおりです。
_with open(file, 'r') as f:
d = pickle.load(f)
TypeError Traceback (most recent call last)
<ipython-input-25-38f711abef06> in <module>()
1 with open(file, 'r') as f:
----> 2 d = pickle.load(f)
TypeError: a bytes-like object is required, not 'str'
_
他のSO=の回答を見たところ、open(file ,'rb')
を使用してopen(file ,'r')
に切り替えるとこの問題が発生するという回答がありました。これで問題が解決した場合は、open(file ,'rb')
実験するだけで次のエラーが発生しました:
_UnpicklingError Traceback (most recent call last)
<ipython-input-26-b77842748a06> in <module>()
1 with open(file, 'rb') as f:
----> 2 d = pickle.load(f)
UnpicklingError: invalid load key, '\x0a'.
_
f = open(file, 'r')
でファイルを開いてf
を入力すると、次のようになります。
_<_io.TextIOWrapper name='D:/LargeDataSets/Enron/final_project_dataset.pkl' mode='r' encoding='cp1252'>
_
だから私も試しました:
_with open(file, 'rb') as f:
d = pickle.load(f, encoding='cp1252')
_
「rb」を使用した場合と同じエラーが発生しました:
_UnpicklingError Traceback (most recent call last)
<ipython-input-27-959b1b0496d0> in <module>()
1 with open(file, 'rb') as f:
----> 2 d = pickle.load(f, encoding='cp1252')
UnpicklingError: invalid load key, '\x0a'.
_
Encoding = bytesでロードするための説明。
Python2でpickle化する辞書があると仮定します
data_dict= {'key1': value1, 'key2': value2}
with open('pickledObj.pkl', 'wb') as outfile:
pickle.dump(data_dict, outfile)
Python3でのunpickle
with open('pickledObj.pkl', 'rb') as f:
data_dict = pickle.load(f, encoding='bytes')
注:辞書のキーは文字列ではなくなりました。それらはバイトです。
data_dict['key1'] #result in KeyError
data_dict[b'key1'] #gives value1
または使用
data_dict['key1'.encode('utf-8')] #gives value1
ええ、Python 2と3のピクル形式の間にはいくつかの変更があります。可能であれば、Python 3.を使用してピクルスデータを再度作成することをお勧めします。
それが不可能/簡単でない場合は、別のエンコーディング設定で試してみるか('utf8'
?を試してみましたか)、またはencoding='bytes'
を使用してデータを読み込んでみてください ここ 次に、文字列をデコードしますコード内で、オブジェクトをさらに検査できます。