在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()
但是我怀疑在ѭ2上使用数组拼接会比我已经做的效率更高。 Python中是否存在一种运行时有效的机制,可以将文件读取为字符串,然后一次遍历几个字节? (我已经签出了
StringIO
,并且它一次只能读取一行,而在这种情况下,由于整个文件是一行,所以我不能读取该行)。     

解决方法

mmap