pickle.Unpickler mit EOFError

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cmate
User
Beiträge: 7
Registriert: Samstag 25. Februar 2012, 21:28

Hallo,
ich bekomme für folgenden Code einen EOF Error.

Code: Alles auswählen

import pickle  

w = pickle.Pickler(open("eineDatei.dat", "wb"),2)
w.dump({"name" : "Lottermann", "vorname" : "Erwin"})
w.dump([23, 5, 666])

r = pickle.Unpickler(open("eineDatei.dat", "rb"))
r.load()
r.load()
Die Fehlermeldung beim ausführen lautet dann:

Code: Alles auswählen

Traceback (most recent call last):
  File "./code.py", line 8, in <module>
    r.load()
EOFError
Nachdem ich das mit verschiedenen Beispielen im Netz verglichen habe, finde ich bisher keinen Fehler. Muss ich die zum Schreiben geöffnete Datei eventuell doch erst schliessen? Wenn, dann ist mir in diesem Zusammenhang unklar wie ich das mache.
BlackJack

@cmate: Ja, Du musst die Datei schliessen. Das ist ein schönes Beispiel dafür warum man das immer machen sollte, entweder explizit oder noch besser mit der ``with``-Anweisung.

Dazu musst Du das Dateiobjekt an einen Namen binden, damit Du es beim erstellen des `Pickler`-Exemplars übergeben kannst.

Code: Alles auswählen

#!/usr/bin/env python
import pickle  


def main():
    filename = 'eineDatei.dat'
    with open(filename, 'wb') as data_file:
        pickler = pickle.Pickler(data_file, pickle.HIGHEST_PROTOCOL)
        pickler.dump({'name' : 'Lottermann', 'vorname' : 'Erwin'})
        pickler.dump([23, 5, 666])
    with open(filename, 'rb') as data_file:
        unpickler = pickle.Unpickler(data_file)
        print unpickler.load()
        print unpickler.load()


if __name__ == '__main__':
    main()
cmate
User
Beiträge: 7
Registriert: Samstag 25. Februar 2012, 21:28

Vielen Dank für deine Hilfe. Damit komme ich weiter. :D
Antworten