我正在用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
我想知道是否将文件从磁盘加载到字符串中,解析出字符串比一次读取几个字节更有效。类似的东西:
with open(filename,'rb') as inFile:
wholeFile = inFile.read()
但我怀疑在wholeFile
上使用数组拼接会比我现在做的更有效。
Python中是否有一个运行时有效的机制将文件读入字符串,然后一次迭代几个字节? (我已经检查了StringIO
,它只允许一次读一行,而不是我想要的,因为整个文件是一行)。