Python 如何使用numpy从二进制文件中获取字节数据

Python 如何使用numpy从二进制文件中获取字节数据,python,numpy,numpy-slicing,Python,Numpy,Numpy Slicing,我必须从文件中获取一些字节作为数据。但要读取的字节数会因某些字节的不同而有所不同。这里有一个例子。 数据的格式为128字节。前64个字节类似。所以没问题。但接下来的64个字节是可变的 Let us say 65th byte is "a", then 66 + 67 bytes = var x 68+69+70+71 bytes = var y In case 65th byte is "b" , then 66th byte : var z 67th byte: var k 68+69

我必须从文件中获取一些字节作为数据。但要读取的字节数会因某些字节的不同而有所不同。这里有一个例子。 数据的格式为128字节。前64个字节类似。所以没问题。但接下来的64个字节是可变的

Let us say 65th byte is "a", then 
 66 + 67 bytes = var x
68+69+70+71 bytes = var y

In case 65th byte is "b" , then 
66th byte : var z
67th byte: var k
68+69 =var o
70+71+72+73 = var m

是否可以使用numpy和dtype获取此类数据。或者我需要运行for循环吗?循环将是昂贵的,因为这是一个巨大的文件。您有什么想法吗?解决方案是什么?

为什么要使用numpy,而不是直接读取文件?numpy对于这样的小数组来说相对比较昂贵,您是否看过
mmap
ing文件,然后使用
struct
提取所需的部分?从128字节中,我计划生成大约50-60列,大约有300万行。我已经在使用mmap,但我认为numpy会更快。您认为我关于numpy的假设在这种情况下是错误的吗?
numpy
如果可以利用整个数组操作,则速度很快。首先,您可以定义一个处理所有128个字节的
dtype
,例如前64个字节有定义的值,其余的作为
('rest','uint8',64)
字段(或类似的内容)。看看它的加载速度有多快。然后将其与使用
struct
迭代解压128字节块的方法进行比较。我尝试加载128字节,numpy要快得多。所以现在我需要找到一种创建数据类型的方法,以便一次加载所有数据。有什么建议吗?
dtype = [('var1',np.uint32),('var2',np.uint16).......]
with open(filename,'rb') as fh:
    data = np.fromfile(fh,dtype)