Seite 1 von 1

Python 3.0: Dictionary mit pickle in datei (als String)

Verfasst: Sonntag 18. Januar 2009, 20:41
von fredistdurstig
Habe mal eine klitzekleine Anfänger-Frage:
Ich versuche gerade ein paar Python 2.5-Skripte auf 3.0 umzustellen, und habe gerade entdeckt, dass sich die Datei-Operationen im Vergleich zur 2.5 geändert haben.

Ich möchte ein Dictionary per pickle.dump in eine Datei schreiben. Wenn ich es binär schreiben möchte, ist das kein Problem:

Code: Alles auswählen

import pickle
dic = {"Müller":21342, "Meier":1245234}
f=open("dic.dat", "wb")
pickle.dump(dic, f)
f.close()
Ich würde mein Dictionary aber lieber in lesbarer Form als Text stream abspeichern und nicht als Byte-Stream, so wie es Python 2.5 standardmässig war. Dort konnte ich das "b" beim file-open einfach weglassen, aber bei Py3 bekomme ich dann die Exception "TypeError: can't write bytes to text stream". Kann ich das Dic auch irgendwie als text stream picklen?
Danke im Vorraus!

Verfasst: Sonntag 18. Januar 2009, 22:24
von BlackJack
@fredistdurstig: Das stimmt so nicht! Auch unter 2.5 darf man `pickle`-Dateien nicht ohne das 'b' speichern. Es gibt zwar (leider) keine Fehlermeldung, aber ohne das 'b' kann man die Dateien sonst unter Umständen nicht mehr auf anderen Plattformen lesen. Also `pickle`-Dateien bitte *immer* im Binärmodus lesen und schreiben.

Ob das Binärformat nur aus für Menschen lesbaren Bytes im ASCII-Bereich oder kompakter gespeichert wird, hängt vom Protokoll ab.