我收到了这个错误,我不知道这意味着什么。我该如何解决这个问题?
我的代码看起来像这样,我以前使用它并且它已经工作了:
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)
这是错误消息:
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'
答案 0 :(得分:13)
当我尝试使用pickle.loads(通过django存储在数据库中)的字符串表示时,发生了这个确切的错误。 Django更改了我的字符串的charactee表示,以便pickle.loads(mystring)
把这个错误告诉了我。当我添加显式字符串转换时,它很好:pickle.loads( str(mystring) )
答案 1 :(得分:4)
我遇到了类似问题,导致KeyError: '\x1f'
。
在我的情况下,如果被腌制到gzip文件(即:gzip.open(fileName,'wb')
),我试图用普通文件对象(即:open(fileName,'rb')
)读取它。
答案 2 :(得分:1)
答案 3 :(得分:1)
Pickle是二进制的,所以你必须这样阅读它。而不是('r')尝试使用('rb')读取二进制文件。此外,如果您编写文件,请确保您将pickle文件视为二进制文件('wb')。这应该有效,希望它有所帮助。
答案 4 :(得分:-1)
也许你应该尝试另一种协议试试pickle.load(in1, 2)
!