Frage zu pickle

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
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

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?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

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
Antworten