このエラーが発生しましたが、その意味がわかりません。この問題を解決するにはどうすればよいですか?
私のコードは次のようになります。以前に使用したことがあり、機能しました。
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'
この正確なエラーは、Djangoを介してデータベースに保存した文字列表現を(pickle.loadsを使用して)pickle化しようとしたときに発生しました。 Django pickle.loads(mystring)
がエラーをスローするように、文字列の文字表現を変更しました。明示的な文字列変換を追加すると、問題ありませんでした:pickle.loads( str(mystring) )
編集:元の投稿のコメントを見ると、これは言及されたユニコード文字列の問題に関連していると思います。通常の文字列をデータベースに入れましたが、Djangoは、このエラーを生成するUnicode文字列を返します。
同様の問題が発生し、_KeyError: '\x1f'
_が発生しました。
私の場合、ifがgzipファイル(つまり:gzip.open(fileName,'wb')
)にピクルス化されていて、通常のファイルオブジェクト(つまり:open(fileName,'rb')
)で読み取ろうとしていました。
Pickleはバイナリなので、そのように読む必要があります。 ( 'r')の代わりに( 'rb')読み取りバイナリを使用してみてください。また、ファイルを作成する場合は、pickleファイルもバイナリ(「wb」)として作成していることを確認してください。それはうまくいくはずです、それが役立つことを願っています。
試してみてください