Seite 1 von 1

Frage zu pickle

Verfasst: Mittwoch 13. August 2003, 11:18
von HarryH
Hallo,

Habe eine Frage zu pickle.

Code: Alles auswählen

import pickle
wert=[("Hallo","Neu")]
pickle.dump(wert,file("pickle.txt","ab+"),1)
Der Wert 'string' wurde nun in der Datei 'pickle.txt' abgespeichert.

Nun möchte ich weitere Werte mit 'pickle.dump' zu dieser Datei hinzufügen und danach mit

Code: Alles auswählen

einlesen=pickle.load(file("pickle.txt","rb"))
den gesamten Wert wieder einlesen.
Aber das geht nicht. Es wird immer der zuerst abgespeicherte Wert eingelesen. Warum? Und wie kann ich den gesamten Inhalt einlesen?

Verfasst: Mittwoch 13. August 2003, 11:56
von Dookie
Hi HarryH,

Du schreibst mit pickle nicht nur die Werte sondern ganze Objekte in eine Datei. Wenn Du jetzt mehrere Listen mit Werten in die Datei schreibst, bekommst Du auch beim Einlesen mehrere Listen zurück.

Code: Alles auswählen

 f = file("pickle.txt","rb")
objekte = []
while 1:
    nextobj = pickle.load(f)
    if not nextobj:
        break
    objekte.append(nextobj)
f.close()
Gruß

Dookie

re:

Verfasst: Mittwoch 13. August 2003, 12:39
von HarryH
Danke Dookie!

Funktionierte bei mir aber nicht.
Ich habe folgenden Fehlermeldung erhalten:

Traceback (most recent call last):
File "neu.py", line 11, in ?
nextobj = pickle.load(f)
File "d:\python22\lib\pickle.py", line 982, in load
return Unpickler(file).load()
File "d:\python22\lib\pickle.py", line 597, in load
dispatch[key](self)
File "d:\python22\lib\pickle.py", line 611, in load_eof
raise EOFError
EOFError


Habe es so versucht:

Code: Alles auswählen

f = file("pickle.txt","rb")
einlesen = []
while 1:
    try:einlesen += cPickle.load(f)
    except:break
f.close()
Das hat bei mir funktioniert.
Aber Danke für deine Erklärungen!

Harry