マップされたネットワークドライブで利用できる大きな(〜75MB)ピクルスオブジェクトがあります(例:X:/folder1/large_pickled_item.pk)オブジェクトにはnumpy配列+ pythonリストが含まれており、cPickle、プロトコル2を使用してピクルス化されています
データの選択を解除しようとすると、次のエラーメッセージが表示されます。
ピクルスの使用:KeyError :(ランダムな文字)
cPickleの使用:IOError:[Errno22]無効な引数
ピクルス化されたオブジェクトのサイズが小さい場合、または(大きい)オブジェクトをローカルドライブにコピーして同じスクリプトを実行しても、エラーは発生しません。
問題がどこにあるのか考えていますか?Python + Pickleの問題ですか、それともWindows共有の問題ですか?
ノート:
- Windows XP Professional(SP3)でPython2.7.2を使用しています
- 私はオブジェクトのフォーマットを制御できません、私はそれらを作成しません、私はそれらを読むことしかできません
スタックトレースの例:
ファイル"test.py"、行38、getObject obj = pickle.load(input)ファイル "C:\ software \ python \ lib \ pickle.py"、行1378、ロードreturn Unpickler(file).load()ファイル"C:\ software \ python \ lib \ pickle.py"、行858、ロードディスパッチキーKeyError:'〜'
解決
- 67076095バイトのチャンクでファイルを文字列バッファに読み込みます。
- ファイルオブジェクトでpickle.loadを呼び出す代わりに、文字列バッファでpickle.loadsを呼び出します。