Python オブジェクトは、文字列と数値のネストされたリストです。
ファイルは書き込み用に 'w' ('wb' ではありません) として開かれましたが、cPickle は protocol=1 (つまりバイナリ) を使用するように指示されました。
シリアライゼーションとデシリアライゼーションのコードは、Linux で正常に機能しました。Windows マシン (Python 2.6) に保存されたオブジェクトを復元できません。
行末のため、Windowsでファイルを明示的に「wb」として開く必要があることを(今では)理解しています。つまり、書き込まれたオブジェクトはネストされたリストであり、 \n が含まれていないため、それが問題になるかどうかはわかりません。
私の質問は、データを回復するために何ができるでしょうか?
の結果は次のprint repr(open(fqfn, 'rb').read(15))
とおりです。
']q\x01(]q\x02]q\x03(U\x0fst'
どんなアイデアでも大歓迎です。
mhawke の提案に従ってl = cPickle.load(open(fqfn, 'r'))
試しましたが、Windows から EOF エラーが返されます。
ファイルを 16 進エディタで直接開いた場合、 のインスタンスを単純に置き換えてから'\r\n'
、バイナリ モードを使用10
し13
て復元できますか?
シリアル化への入力は次のようなものでした。
[['start', 3454654], [1234567645, -1 , 99], [1234567900, 1 , 56], ...]
入力の順序、各リストの長さ、およびいくつかの値 (たとえば、先頭の文字列といくつかの数字) を知っています。
したがって、私の質問は、バイナリ エンコーディングを処理するスクリプトを作成して逆シリアル化できるかどうかだと思います。Python オブジェクトに入れる必要はありません。ascii で十分です。