Как гласит старая поговорка, у меня есть плохие новости и хорошие новости. Плохо то, что я не могу понять, почему ваш код не работает одинаково как в версии 2, так и в версии 3 Python.
. Хорошо, что я смог воспроизвести проблему, используя пример данные, которые вы предоставили, но, что более важно, способны разработать что-то, что не только работает согласованно в обеих версиях, но, скорее всего, намного быстрее, потому что не использует for
l oop для поиска в каждой кусок данных ищет шаблоны заголовков .jpg.
from __future__ import print_function
LIMIT = 100000 # Number of chunks (for testing).
CHUNKSIZE = 32 # Bytes.
HDRS = b'\xff\xd8\xff\xe0', b'\xff\xd8\xff\xe1'
IMG_PATH = r'C:\vols\Files\Temp\carve.dd.002'
print('Searching...')
with open(IMG_PATH, 'rb') as file:
chunk_index = 0
found = 0
while True:
data = file.read(CHUNKSIZE)
if not data:
break
# Search for each of the headers in each chunk.
for hdr in HDRS:
offset = 0
while offset < (CHUNKSIZE - len(hdr)):
try:
head_loc = data[offset:].index(hdr)
except ValueError: # Not found.
break
found += 1
file_offset = chunk_index*CHUNKSIZE + head_loc
print('found: #{} at {:,}'.format(found, file_offset))
offset += (head_loc + len(hdr))
chunk_index += 1
if LIMIT and (chunk_index == LIMIT): break # Stop after this many chunks.
print('total found {}'.format(found))