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
Files unter Windows und Mac
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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()
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
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
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()
@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.
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
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 ...
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 ...
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.Louis19 hat geschrieben:Aber heißt das mit den Binärdateien, dass ich die Files immer mit wb und rb "picklen" sollte ?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice