web-dev-qa-db-fra.com

python: pickle.load () soulève EOFError

J'ai un fichier pickle utilisant le format .txt. Je veux charger ce fichier pickle avec python 2.7. La taille est de 438.5 MB. Voici comment je charge les données:

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

return model

Et je reçois cette erreur

    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

c'est le code que j'utilise pour écrire pickle:

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

J'ai utilisé read binary ('rb') pour charger et écrire binary ('wb') pour écrire, mais il y a toujours cette erreur. Avez-vous une idée pourquoi c'est toujours une erreur? Comment puis-je résoudre cette erreur?

Merci de votre aide....

3
estu

Pour charger des données, ne voulez-vous pas lire des données ("rb") au lieu d'écrire des données ("wb")?

Le chargement des données devrait ressembler à ceci:

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

De plus, l'utilisation de f.close () n'est pas nécessaire car vous utilisez une clause with/as.

5

J'ai rencontré la même erreur lors du chargement d'un gros fichier vidé dans le protocole le plus élevé.

Cela semble être un bug de la bibliothèque de cornichons. Je l'ai résolu en utilisant cPickle à la place.

import cPickle as pickle
11
David

Assurez-vous que votre fichier de cornichons n'est pas vide, par exemple. si vous choisissez une variable non initialisée.

0
stackoverflowwww