我有大量存储为字符串的 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' )
我取回我的数组,并...
表示从另一个窗口复制和粘贴输出。print(bin_str)
我尝试bin_str
直接写入文件以取消腌制,但这不起作用,它抱怨TypeError: 'str' does not support the buffer interface
. 转换bin_str
为可以直接写入二进制文件的内容的一些明智的方法会在尝试读回它时导致 pickle 错误。
编辑 2 所以我猜发生的事情是我的二进制泡菜字符串最终编码在一个普通字符串中,例如:
"b'pickle'"
这是不幸的,我还没有想出如何处理它,除了这种荒谬和复杂的方式来取回它:
open('temp.py', 'w').write('foo = ' + bin_str)
from temp import foo
numpy.loads( foo )
这似乎是一个非常可耻的问题解决方案,所以请给我一个更好的解决方案!