web-dev-qa-db-ja.com

python:pickle.load()EOFErrorを発生させる

.txt形式を使用したpickleファイルがあります。 python 2.7でこのピクルスファイルをロードしたい。サイズは438.5 MBです。これがデータのロード方法です。

def readpickle(path="C:/Python27/Lib/site-packages/xy/"):
with open(path+"filenamereal2.txt","rb") as f:
    model = pickle.load(f)

return model

そして私はこのエラーを受け取ります

    itemmodelreal=readpickle(path="C:/Users/Lab Komputasi/Documents/estu/") 
Traceback (most recent call last):
File "<ipython-input-33-265e46f74915>", line 1, in <module>
    itemmodelreal=readpickle(path="C:/Users/Lab Komputasi/Documents/estu/")

  File "<ipython-input-31-fbd3e8b9e043>", line 3, in readpickle
    model = pickle.load(f)

  File "C:\Users\Lab Komputasi\Anaconda2\lib\pickle.py", line 1384, in load
    return Unpickler(file).load()

  File "C:\Users\Lab Komputasi\Anaconda2\lib\pickle.py", line 864, in load
    dispatch[key](self)

  File "C:\Users\Lab Komputasi\Anaconda2\lib\pickle.py", line 886, in load_eof
    raise EOFError

EOFError

これは私がピクルスを書くために使用するコードです:

 with open("filenamereal3.txt", "wb") as f:
    pickle.dump(result, f)
f.close()

読み込みバイナリ( 'rb')を使用して読み込み、書き込みバイナリ( 'wb')を書き込みましたが、それでもエラーが発生します。それがまだエラーである理由が何かわかりますか?このエラーを解決するにはどうすればよいですか?

ご協力ありがとうございました....

7
estu

データをロードするために、データを書き込む( "wb")の代わりにデータ( "rb")を読み取りたいと思いませんか?

データの読み込みは次のようになります。

 with open("C:/Users/Lab Komputasi/Documents/estu/filenamereal1.txt", "rb") as f:
     data = pickle.load(f)

また、with/as句を使用しているため、f.close()の使用は不要です。

7

最高のプロトコルでダンプされた大きなファイルをロードしているときに同じエラーが発生しました。

これはpickleライブラリのバグのようです。代わりにcPickleを使用して解決しました。

import cPickle as pickle
12
David

Pickleファイルが空でないことを確認してください。初期化されていない変数をpickle化した場合。

2
langlauf.io