Version 2.7 / 3.3 Verständnisprobleme von pickle
Verfasst: Mittwoch 7. November 2012, 20:56
Hallo,
ich will euch mal hier ein kleines Programm zeigen, was im Aktuellen Verzeichnis alle .txt einliest und dann ein Wörterbuch erstellt, wo die Wörter der Dateien die Values sind und die die Namen der Dateien die Keys.
Das Programm geht unter 2.7 super. In der Uni benutzen wir die 2.7 Version. Zuhause hab ich aber die 3.3 Version und wollte das Programm nun ausführen. Ich kriege aber pickle nicht unter Kontrolle in der 3.3 Version und weiß nur so halb warum.
Die Lösung war, dass ich die pickle datei löschen müsste. aber warum das ganze ?
Für die 3.3 Version hab ich nun folgendes verändert und so geht er auch in der Version 3.3 :
Das Problem ist nur, dass ich nicht verstehe, warum ich open("picklesp.pickle","wb") in der 3.3 Version machen muss. Kann mir das nochmal einer bitte erklären. Ich hab das hier :
http://docs.python.org/3.3/library/pickle.html nicht so ganz verstanden und verstehe den Unterschied nicht wirklich von 2.7 und 3.3 und warum das vor allem so gemacht wurde.
Eine zweite Frage zu pickle ist : Ist es möglich ein gepicklete Datei, die in der Version 2.7 entstanden ist in die Version 3.3 einzulesen?
Eine andere Sache ist : Habt ihr noch Verbesserungsvorschläge für den Code ? Was haltet ihr vom Code ?
Was ist besser, diese from bla import x, oder import bla nur ?
Ps.: Der Code ist glaub ich gut verständlich und deswegen nicht groß kommentiert.
Mit freundlichen Grüßen
ich will euch mal hier ein kleines Programm zeigen, was im Aktuellen Verzeichnis alle .txt einliest und dann ein Wörterbuch erstellt, wo die Wörter der Dateien die Values sind und die die Namen der Dateien die Keys.
Code: Alles auswählen
import pickle
from os import listdir
import re
import pickle
try:
with open("picklesp.pickle","r") as speicherort:
Diginari = pickle.load(speicherort)
except IOError as err:
Diginari = {}
except pickle.PickleError as p_error:
print("Pickle Fehler : ", p_error)
alle_Datein = [Datei for Datei in listdir(".") if ".txt" in Datei and ".txt~" not in Datei]
for daten in alle_Datein:
try:
with open(daten,"r") as aktuelle_datei:
tet = re.split("\s",aktuelle_datei.read())
for woerter in tet:
if (len(woerter) == 0):
pass
elif (woerter not in Diginari.keys()):
Diginari[woerter] = [daten]
elif (woerter in Diginari.keys()):
if (daten not in Diginari[woerter]):
Diginari[woerter].append(daten)
except IOError as err:
print("Dateifehler ist Aufgetreten.\nEs ist folgender Fehler: ",err," in der Datei : ",daten)
print(Diginari)
try:
with open("picklesp.pickle","w") as speicherort:
pickle.dump(Diginari,speicherort)
except IOError as err:
print("Dateifehler ist beim Speichern Aufgatereten.\nEs ist folgender Fehler: ",err)
except pickle.PickleError as p_error:
print("Pickle Fehler : ", p_error)
Die Lösung war, dass ich die pickle datei löschen müsste. aber warum das ganze ?
Für die 3.3 Version hab ich nun folgendes verändert und so geht er auch in der Version 3.3 :
Code: Alles auswählen
try:
with open("picklesp.pickle","[b]rb[/b]") as speicherort:
Diginari = pickle.load(speicherort)
except IOError as err:
Diginari = {}
except pickle.PickleError as p_error:
print("Pickle Fehler : ", p_error)
#... code ist gleich mit oben .....
try:
with open("picklesp.pickle","[b]wb[/b]") as speicherort:
pickle.dump(Diginari,speicherort)
except IOError as err:
print("Dateifehler ist beim Speichern Aufgatereten.\nEs ist folgender Fehler: ",err)
except pickle.PickleError as p_error:
print("Pickle Fehler : ", p_error)
http://docs.python.org/3.3/library/pickle.html nicht so ganz verstanden und verstehe den Unterschied nicht wirklich von 2.7 und 3.3 und warum das vor allem so gemacht wurde.
Eine zweite Frage zu pickle ist : Ist es möglich ein gepicklete Datei, die in der Version 2.7 entstanden ist in die Version 3.3 einzulesen?
Eine andere Sache ist : Habt ihr noch Verbesserungsvorschläge für den Code ? Was haltet ihr vom Code ?
Was ist besser, diese from bla import x, oder import bla nur ?
Ps.: Der Code ist glaub ich gut verständlich und deswegen nicht groß kommentiert.
Mit freundlichen Grüßen