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

时间:2011-04-14 17:57:27

标签: 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

我想知道是否将文件从磁盘加载到字符串中,解析出字符串比一次读取几个字节更有效。类似的东西:

with open(filename,'rb') as inFile:
   wholeFile = inFile.read()

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

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

1 个答案:

答案 0 :(得分:7)