Как использовать sizehint и seek

Здраствуйте! Читаю по байтно файл(структура файла 144 байт данных + 10 байт заголовок(что бы это не значило). Задача сейчас прочесть первые 144 байт и следующие 144 байта(т.е. 1-144 и 154-298 надеюсь правильно посчитал). Для подсчёта до 298 байт мне нужна функция sizehint, а для того, что бы убрать заголовок seek. Но я не знаю куда их поставить, что бы они работали.

filehandle = open(myfile,'rb') 
while True:  
    # читаем одну строку
    filehandle.sizehint(144)
    line = filehandle.readline()
    if not line:
        break
    #print(line)

Ответы (1 шт):

Автор решения: CrazyElf

У вас какая-то мешанина в вопросе. Во-первых так и непонятно, какого размера у вас что и как оно расположено, из того, что написано у меня не сложилась однозначная картина. Во-вторых вы пытаетесь читать двоичный файл по строкам (?!), так не делается. По строкам читают текстовые файлы, а двоичные читают побайтово, там не различают никаких переводов строк и прочих управляющих символов, только количество читаемых байт.

Таким образом, работа с вашим файлом должна выглядеть таким образом, на мой взгляд. Заголовок обычно идёт сначала, потом идут данные. Так что заголовок пропускаем, если он вам не нужен, и читаем данные:

header_size = 10
data_size = 144
with open(myfile,'rb') as f:
    f.seek(header_size, 0) # пропускаем заголовом
    data = f.read(data_size) # читаем данные
    #print(data)

Параметр sizehint используется с readline, так что он вам вообще не нужен.

→ Ссылка