2016-12-22 8 views
2

ここで初心者は、ファイルpでデータを読み込みます。Pickle、データを読み込み、サポートされていないpickleプロトコル:3 python 2.7

とValueError:サポートされていないピクルスプロトコル:3

誰かがどちらか、私はそれを修正することができますどのように指摘して変更することができ、私は次のエラーを取得する

import pickle 

training_file = "/home/sk/CarND-Traffic-Sign-Classifier-Project/train.p" 
testing_file = "/home/sk/CarND-Traffic-Sign-Classifier-Project/test.p" 
with open(training_file, mode='rb') as f: 
    train = pickle.load(f) 
with open(testing_file, mode='rb') as f: 
    test = pickle.load(f) 

私のコードは次のようになりますプロトコルやデータを他の方法で読むことはできますか?

+0

でそれらを読み込むことができますそれはあなたのコードですか? – iFlo

+0

何が欠けていますか? – hmmmbob

+0

pickleをインポートするとこのエラーが発生しますか? – iFlo

答えて

3

python3を使ってpickleファイルを作成し、python2で読み込みを試みたときと同じ問題がありました。 Python3でプログラムを実行するか、python2を使ってpickleファイルを作成してみてください。

+0

他の方法はありませんか? – hmmmbob

+0

良い方法が提案されました。もっと情報がここにあります[http://stackoverflow.com/questions/28218466/unpickling-a-python-2-object-with-python-3] – Degraw

2

Pickleは、異なるプロトコルを使用してデータをバイナリストリームに変換します。 (0,1,2)、デフォルトは0です。 python 3には5つの異なるプロトコル(0,1,2,3,4)があり、デフォルトは3です。 。 python 2でデータをロードできるようにするには、python 3に3未満のプロトコルを指定する必要があります.polle.dumpを呼び出すときにprotocolパラメータを指定できます。

これらのファイルは、プロトコル> = 3(おそらく3)で作成されたようです。だからあなたが得る唯一のオプションは、Python 3にロードしてから、より低いプロトコルでそれをダンプすることです。

+1

はい..インストールされたpython 3.5 now ..もちろんtensorflowは私がそれをインストールしようとすると、行方不明となります。すでにubuntuを再インストールする必要があるようです( – hmmmbob

+0

)。ubuntuを再インストールすることは本当に必要ではありません。 – iFlo

+0

すでにpip-3.5を入手しておく必要があります.pipコマンドを起動すると、 (あなたのケースで2.7と思われますが)/usr/local/bin/pip3.5を使用してコマンドを実行すると – iFlo

1

明らかにpickleプロトコル3は、python 3コードがオブジェクトをpickleしたときに使用されました。あなたはしかし、それをロードして、プロトコルとそれをダンプ短いのpython 3プログラムを書くことができパイソン2のプロトコル3をunpickle化することはできません= 2.次に、あなたは、Python 2

https://docs.python.org/2/library/pickle.html#usage

関連する問題