Reputation: 715
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
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
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
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