Вы просматриваете свой файл как по строкам, так и по байтовым символам.
for line in file_read: # read by line
bytes = file_read.read(2) # read by character
Первый ищет новые строки (b'\n'
aka b'\x0A'
) и может использовать произвольное количество байтов.Это означает, что ваше чтение пар байтов, скорее всего, смещено на 1 и, возможно, в конец файла.
Чтение вашего файла только по парам символов.Вы можете использовать с двумя аргументами iter
, чтобы удобно сделать это в цикле for
:
for pair in iter(lambda: file_read.read(2), b''):
out = struct.unpack("h", pair)
file_write.write(str(out))
В Python 3.8 вы можете использовать выражение присваивания , а также:
while pair := file_read.read(2):
out = struct.unpack("h", pair)
file_write.write(str(out))