shabelski89
@shabelski89
engineer

Побайтовое чтение с определенного отрезка файла?

Добрый день!
Есть файл, внутри трафик (заголовок пакета + пакет) , читать файл с начала и нужным образом декодировать могу. Проблема в том что иногда мне не нужно читать весь файл, а вычитать диапазон байт, приходится читать файл с начала до места среза.

Например есть файл размером 12345 байт, мне надо вырезать из него отрезок с 1234 по 7890 байт.
Вот мой рабочий код, вопрос можно ли задавать срез?
begin_f = 1234
end_f = 7890
n = 0

with open(file, 'rb') as ifile:
	while True:
		one_byte = ifile.read(1)  # думал делать размер чанка == (begin_f - 1), но плохо для больших файлов.
		if n == begin_f:
			with open(output_file, 'wb') as ofile:
				data = one_byte + ifile.read(end_f - begin_f - 1)
				ofile.write(data)
				break
		n += 1


В целом вопрос как скипать ненужный промежуток байт, чтобы читать с нужного момента? И можно ли читать файл с конца?

Благодарен за ответы и интересные примеры.
  • Вопрос задан
  • 569 просмотров
Решения вопроса 1
@Taus
Воспользуйтесь seek (io.IOBase.seek).
begin_f = 1234
end_f = 7890

bytes_to_read = end_f - begin_f
with open(file, 'rb') as ifile, open(output_file, 'wb') as ofile:
    ifile.seek(begin_f)
    data = ifile.read(bytes_to_read)
    ofile.write(data)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы