pickle platformabhängig?

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
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

Hallo,

ich habe unter linux (py2.6) eine Objektinstanz gepickelt, unter winXP
entpickelt und dann wieder unter linux bekomme ich :

Code: Alles auswählen

ValueError: insecure string pickle
die Klasse sieht so aus:

Code: Alles auswählen

class Copy9Obj():
     def __init__(self, coList=[]):
        self.c9Dict={'runAt'  : [],
                     'lastOP' : '',
                     'co'     : coList}

    def loadp(self, dir):
        try:
            f=open(os.path.join(dir,'c9p.dat'),'r')
        except IOError:
            msg_user(os.path.join(dir, 'c9p.dat')+
                     ' nicht zu oeffnen !!')
        self.c9Dict = pickle.load(f)
        f.close()


    def dumpp(self, dir):
        try:
            f=open(os.path.join(dir,'c9p.dat'),'w')
            pickle.dump(self.c9Dict, f)
            f.flush()
            f.close()
        except IOError:
            msg_user('!! Fehler beim schreiben auf '+
                     os.path.join(dir, 'c9p.dat'))

    def get(self):
        return self.c9Dict

    def set(self, c9Dict):
        self.c9Dict=c9Dict

    def setLastOP(self, nlastOP):
        self.c9Dict['lastOP']=nlastOP

    def getLastOP(self):
        return self.c9Dict['lastOP']
die Aufrufe jeweils:

Code: Alles auswählen

c9o = Copy9Obj()
c9o.loadp(verz)
c9o.dumpp(verz)
Gruß
joh
lunar

@joh#: Öffne die Dateien binär ("rb" statt "r" und "wb" statt "w").
BlackJack

@joh#: Pickle sind nicht Plattformunabhängig, aber das öffnen von Dateien ist es. Wenn man Binärdaten verarbeiten möchte, und das sind „pickles”, dann muss man die Dateien auch immer im Binärmodus öffnen. Sonst kann die Plattform, beziehungsweise die C-Laufzeitbibliothek für die Plattform bei Dateien, die im Textmodus geöffnet wurden, Bytes verändern, oder bei bestimmten Bytewerten das lesen einfach abbrechen.
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

ja, mit Binärdateien geht es,
besten Dank.
Antworten