从文件中读取和存储任意字节长度的整数

时间:2012-07-16 15:57:29

标签: python numpy

我试图通过在numpy中进行解析/数据累积来加速我去年写的二进制文件解析器。 numpy能够定义自定义数据结构并将二进制文件中的数据融入它们看起来像我需要的,除了这些文件中的一些字段是“非标准”长度的无符号整数(例如6个字节)。由于我使用的是Python 2.7,因此我创建了自己的int.from_bytes模拟版本来处理这些字段,但如果有任何方法可以将这些字段本地读取为numpy中的整数,那么显然会更快更好。

1 个答案:

答案 0 :(得分:4)

Numpy不支持任意字节长度的整数,使用ctypes位域会比它的价值更麻烦。

我建议使用矢量化切片将数据转换为下一个更高标准尺寸的整数:

buf = "000000111111222222"
a = np.ndarray(len(buf), np.dtype('>i1'), buf)
e = np.zeros(len(buf) / 6, np.dtype('>i8'))
for i in range(3):
    e.view(dtype='>i2')[i + 1::4] = a.view(dtype='>i2')[i::3]
[hex(x) for x in e]