marsx
marsx

Reputation: 715

pickling error in python?

I am getting this error, and I dont know what it means. How can I fix this problem?

my code looks like this, I've used it before and it has worked:

parentdir = os.getcwd()
dirlist = os.listdir(parentdir)

for dir in dirlist:
    if not dir == "pubs_edits": continue
    if os.path.isdir(os.path.join(parentdir, dir)):
                        os.chdir(os.path.join(parentdir, dir))
                        file_list = os.listdir(os.path.join(parentdir, dir))
                        for f in file_list:
                            in1 = open(f, 'r')
                            dict2 = pickle.load(in1)

This is the error message:

    File "/home/md202/pmid_editor.py", line 18, in <module>
        dict2 = pickle.load(in1)
    File "/usr/lib/python2.5/pickle.py", line 1370, in load
        return Unpickler(file).load()
    File "/usr/lib/python2.5/pickle.py", line 858, in load
        dispatch[key](self)
KeyError: '\x00'

Upvotes: 17

Views: 32065

Answers (5)

JayLav
JayLav

Reputation: 101

Pickle is binary so you have to read it as such. Instead of ('r') try using ('rb') read binary. Also, if your writing the file ensure you are wrting the pickle file as binary as well ('wb'). That should work, hope it helps.

Upvotes: 2

drevicko
drevicko

Reputation: 15180

I had a similar problem, resulting in KeyError: '\x1f'.

In my case, if was pickled to a gzip file (ie: gzip.open(fileName,'wb')), and I was trying to read it with a normal file object (ie: open(fileName,'rb')).

Upvotes: 4

Matt
Matt

Reputation: 139

This exact error occurred for me when I tried to unpickle (using pickle.loads) a string representation that I had stored in a database via django. Django changed the charactee representation of my string so that pickle.loads(mystring) threw me that error. When I added an explicit string conversion in, it was fine: pickle.loads( str(mystring) )

EDIT: looking at the comments on the original post, I think this is related to the unicode string issue mentioned. I put a normal string into the database, and django gives me back a unicode string that produces this error.

Upvotes: 13

nZeeR
nZeeR

Reputation: 31

try

pickle.loads()

Upvotes: 1

blob42
blob42

Reputation: 549

maybe you should try another protocol try pickle.load(in1, 2) !

Upvotes: -2

Related Questions