一尘不染

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

python

我试图通过在numpy中进行解析/数据累积来加快我去年编写的二进制文件解析器的速度。numpy定义自定义数据结构并将数据从二进制文件导入其中的能力看起来像我所需要的,除了这些文件中的某些字段是“非标准”长度(例如6字节)的无符号整数。由于我使用的是Python
2.7,所以我制作了自己的int.from_bytes仿真版本来处理这些字段,但是如果有任何方法可以将这些字段读取为numpy中的整数,那显然会更快并且更可取。


阅读 295

收藏
2021-01-20

共1个答案

一尘不染

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]
2021-01-20