Seite 1 von 1
Files unter Windows und Mac
Verfasst: Samstag 24. Oktober 2009, 18:27
von Louis19
Hey,
ich hab ein Problem mit meinem Vokabellernprogramm, was ich mir geschrieben hab.
Und zwar werden dabei die Vokabeln in Files abgespeichert. (Einfach damit man sie nicht dauernd neu eingeben muss).
Jetzt lassen sich jedoch die Files die ich in Windows abgespeichert hab nicht auf meinem Mac öffnen, obwohl auf dem Mac das selbe Programm läuft wie unter Windows.
Jetzt hab ich mal unter Mac die Files abgespeichert(mit den selben Vokabeln), um zu sehen wo der Unterschied ist und hab festgestellt das in beiden absolut das selbe steht. (die Vokabeln sind vorher mit "utf-8" codiert worden.)
Wäre super cool wenn mir einer sagen könnte, was ich falsch mach.
Gruß
Louis
Verfasst: Samstag 24. Oktober 2009, 18:36
von Leonidas
Die Diskette auf der du deine Daten übertragen hast muss wohl kaputt sein.
Im Ernst, ohne Code oder Beispieldateien kann man dir nicht helfen. Ich vermute zwar dass es an den Zeilenenden hängt, aber ohne Code weiß man auch gar nicht was du tust.
Verfasst: Samstag 24. Oktober 2009, 18:40
von Louis19
also der Code zum Abspeichern ist im Prinzip der hier:
Code: Alles auswählen
def accumuler(self):
self.l_vorher = self.latein.get()
self.d_vorher = self.deutsch.get()
self.l = self.l_vorher.encode("utf-8")
self.d = self.d_vorher.encode("utf-8")
self.vv = self.v.get()
if not self.l or not self.d:
pass
else:
self.datei=file(self.pfad,'r')
self.wb = pickle.load(self.datei)
self.datei.close()
self.wb[self.l] = self.d
self.schreibdatei = file(self.pfad, 'w')
pickle.dump(self.wb, self.schreibdatei)
self.schreibdatei.close()
Verfasst: Samstag 24. Oktober 2009, 18:51
von Louis19
falls jemand etwas mit dem Error anfangen kann:
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 1410, in __call__
return self.func(*args)
File "/Users/Luggi/Desktop/Vokabeltrainer/deutsch-fremdsprache-vocabeltrainer.pyw", line 47, in charger
self.newdikt = pickle.load(self.datei)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pickle.py", line 1370, in load
return Unpickler(file).load()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pickle.py", line 858, in load
dispatch[key](self)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/pickle.py", line 966, in load_string
raise ValueError, "insecure string pickle"
ValueError: insecure string pickle
Verfasst: Samstag 24. Oktober 2009, 18:55
von derdon
Code: Alles auswählen
def accumuler(self):
self.l_vorher = self.latein.get()
self.d_vorher = self.deutsch.get()
self.l = self.l_vorher.encode("utf-8")
self.d = self.d_vorher.encode("utf-8")
self.vv = self.v.get()
if self.l and self.d:
self.datei=file(self.pfad,'r')
self.wb = pickle.load(self.datei)
self.datei.close()
self.wb[self.l] = self.d
self.schreibdatei = file(self.pfad, 'w')
pickle.dump(self.wb, self.schreibdatei)
self.schreibdatei.close()
macht das gleiche. Bei deinem Problem kann ich dir leider nicht helfen.
Verfasst: Samstag 24. Oktober 2009, 19:07
von BlackJack
@Louis19: Pickle-Dateien sind *grundsätzlich* Binärdateien, also muss man sie auch im Binärmodus öffnen. Das kodieren als UTF-8 ist unnötig, vor allem weil man sie dann beim einlesen ja wieder dekodieren muss.
Verfasst: Samstag 24. Oktober 2009, 19:07
von b.esser-wisser
Hilft's, wenn du (unter windows) die Dateien, in die du 'reinpicklest', im Binärmodus ("rb", bzw "wb") öffnest? (um Mal Leonidas Gedanken auszuschreiben)
Die Binärgeschichte steht auch z.B. in der Docu von pickle, falls du dich fragst, wie man auf sowas kommt
hth, Jörg
edit: keiner kann sagen, ich wär zu langsam gewesen ...
Verfasst: Samstag 24. Oktober 2009, 19:25
von Louis19
Jo, es hilft !
Vielen Dank an alle, die mir geholfen haben!

Verfasst: Samstag 24. Oktober 2009, 19:29
von Louis19
Die Antwort von BlackJack hab ich nicht ganz verstanden. Also, dass ich mir das codieren sparen kann ist schon klar.
Aber heißt das mit den Binärdateien, dass ich die Files immer mit wb und rb "picklen" sollte ?
Verfasst: Samstag 24. Oktober 2009, 19:34
von Leonidas
Louis19 hat geschrieben:Aber heißt das mit den Binärdateien, dass ich die Files immer mit wb und rb "picklen" sollte ?
Naja, Windows unterscheidet bei Dateien zwischen Textdateien und Binärdateien. Bei Textdateien werden Zeilenendenzeichen verändert, bei Binärdateien nicht. Somit sind Binärdateien die man unter Windows im Textmodus speichert kaputt und das erklärt auch dein Problem.
Verfasst: Samstag 24. Oktober 2009, 19:36
von Louis19
Ok, danke.