Python中高效的变长字节字符串迭代
我正在用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
,它只允许一次读取一行,这在这种情况下不适用,因为整个文件就是一行)。