Files unter Windows und Mac

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
Louis19
User
Beiträge: 18
Registriert: Mittwoch 17. Juni 2009, 12:07

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
Leonidas
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Louis19
User
Beiträge: 18
Registriert: Mittwoch 17. Juni 2009, 12:07

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()
Louis19
User
Beiträge: 18
Registriert: Mittwoch 17. Juni 2009, 12:07

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
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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.
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.
Benutzeravatar
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 :evil:

hth, Jörg
edit: keiner kann sagen, ich wär zu langsam gewesen ...
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Louis19
User
Beiträge: 18
Registriert: Mittwoch 17. Juni 2009, 12:07

Jo, es hilft !

Vielen Dank an alle, die mir geholfen haben!
:D
Louis19
User
Beiträge: 18
Registriert: Mittwoch 17. Juni 2009, 12:07

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 ?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Louis19
User
Beiträge: 18
Registriert: Mittwoch 17. Juni 2009, 12:07

Ok, danke.
Antworten