在Python中对字符串进行高效的可变字节迭代

Ric*_*ich 0 python file-io

我正在用Python读取一个大的(500MB)二进制文件,并将其逐字节解析为Python数据结构.此文件表示稀疏数据网格.有时我需要读取一个字节,两个字节或四个字节,具体取决于格式.出于官僚主义的原因,我需要在Python而不是C中执行此操作.

我正在寻找运行时有效的机制来在Python中执行此操作.下面是我现在正在做的一个简化示例:

with open(filename,'rb') as inFile:
 nCoords = struct.unpack('!i',inFile.read(4))[0]
 for i in range(nCoords):
    coord = (struct.unpack_from('!h',inFile.read(2))[0],struct.unpack_from('!h',inFile.read(2))[0]) # x, y coord
    nCrops = struct.unpack_from('!B',inFile.read(1))[0] #n crops
    for j in range(nCrops):
        cropId = struct.unpack_from('!B',inFile.read(1))[0] #cropId
Run Code Online (Sandbox Code Playgroud)

我想知道是否将文件从磁盘加载到字符串中,解析出字符串比一次读取几个字节更有效.就像是:

with open(filename,'rb') as inFile:
   wholeFile = inFile.read()
Run Code Online (Sandbox Code Playgroud)

但我怀疑使用数组拼接wholeFile会比我现在做的更有效.

在Python中是否有一个运行时有效的机制将文件读入字符串,然后一次迭代几个字节? (我已经检查过StringIO,它只允许一次读一行,而不是我想要的,因为整个文件是一行).