文字列に選択して保存されている大量の numpy ndarrays があります。それは設計上の選択が不十分だったかもしれませんが、それは私がしたことであり、選択された文字列が変換されたか、途中で何かが変換されたように見えます.ピクルを解除しようとすると、それらが型str
であることに気付き、次のエラーが発生します:
TypeError: 'str' does not support the buffer interface
私が呼び出すとき
numpy.loads(bin_str)
bin_str
私が解凍しようとしているものはどこにありますか。印刷するbin_str
とこんな感じ
b'\x80\x02cnumpy.core.multiarray\n_reconstruct\nq\x00cnumpy\nndarray\nq\x01K\x00\x85q\x02c_codecs\nencode\nq\x03X\x01\x00\x00\ ...
しばらく継続しているので、情報はそこにあるようですが、numpy/pickle が必要とする文字列形式に変換する方法がよくわかりません。気まぐれでやってみた
numpy.loads( bytearray(bin_str, encoding='utf-8') )
と
numpy.loads( bin_str.encode() )
どちらもエラーをスローします_pickle.UnpicklingError: unpickling stack underflow
。何か案は?
PS:私はpython 3.3.2とnumpy 1.7.1を使用しています
編集
次のことを行うと、次のことがわかりました。
open('temp.txt', 'wb').write(...)
return numpy.load( 'temp.txt' )
配列を取得し、別のウィンドウからの出力をコピーして貼り付けること...
を示します。unpickle するためにファイルに直接書き込もうとしましたが、うまくいきません。バイナリ ファイルに直接書き込むことができるものに変換するいくつかの正気な方法は、それを読み戻そうとすると pickle エラーになります。print(bin_str)
bin_str
TypeError: 'str' does not support the buffer interface
bin_str
編集 2 何が起こったのかというと、バイナリのピクル文字列が通常の文字列内にエンコードされてしまったということです。次のようなものです。
"b'pickle'"
これは残念なことであり、それを取り戻すためのこのばかげた複雑な方法を除いて、私はそれに対処する方法を理解していません:
open('temp.py', 'w').write('foo = ' + bin_str)
from temp import foo
numpy.loads( foo )
これは問題に対する非常に恥ずべき解決策のように思えるので、より良い解決策を教えてください!