Вы читаете байты (open(..., 'rb')
), поэтому, когда вы берете один элемент строки байтов, вы получаете байт ie. число. Этот номер уже является символьным кодом, поэтому просто пропустите ord
. Кроме того, вы можете открыть файл без модификатора b
(open(..., 'r')
), который будет возвращать строку; Я бы посоветовал сохранить ее как байтовую строку (или вы можете столкнуться с проблемами кодирования, если анализируете что-то не-ascii).
Вы столкнетесь с аналогичной проблемой при сохранении файла: вы не можете написать строка в файл, открытый с модификатором b
. Поскольку у вас есть символы вне диапазона ascii (> 128), запись в виде строки не является хорошей идеей, так как python попытается закодировать ваши символы (например, в UTF-8), и вы получите совершенно другой байт. Следовательно, наилучшее решение, вероятно, состоит не в том, чтобы объединить ваши данные в строку в вашем l oop (часть, где вы делаете '{}{}'.format(...)
, а в том, чтобы иметь список (encoded = []
, соответствующий с encoded.append(current)
) и преобразовать это в байтовую строку, используя bytes(encoded)
после вашего l oop. Затем вы можете без проблем передать его в write
.
Что касается того, как декодировать ваш файл, вы можете просто открыть файл, как вы сделать для кодирования, прочитать два байта b1
и b2
и добавить [b1]*b2
к вашему выводу (опять же, как список), и преобразовать это в байтовую строку с bytes()
.