Я читаю большой (500 МБ) двоичный файл в Python и разбираю его побайтно в структуре данных 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
, и он позволяет читать только строку за раз, а не то, что я хочу в этом случае, поскольку весь файл - одна строка).