Seite 1 von 1

pickle platformabhängig?

Verfasst: Dienstag 10. April 2012, 09:49
von joh#
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

Re: pickle platformabhängig?

Verfasst: Dienstag 10. April 2012, 09:53
von lunar
@joh#: Öffne die Dateien binär ("rb" statt "r" und "wb" statt "w").

Re: pickle platformabhängig?

Verfasst: Dienstag 10. April 2012, 09:55
von 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.

Re: pickle platformabhängig?

Verfasst: Mittwoch 11. April 2012, 08:08
von joh#
ja, mit Binärdateien geht es,
besten Dank.