Python запись в файл - PullRequest
       12

Python запись в файл

3 голосов
/ 25 июня 2010

У меня тут небольшая проблема.Я конвертирую двоичный файл в ascii, чтобы сжать данные.Кажется, что все работает нормально, но когда я конвертирую '11011011' в ascii и пытаюсь записать его в файл, я получаю сообщение об ошибке

UnicodeEncodeError: кодек 'charmap' не может кодировать символ '\ xdb' в позиции0: символ соответствует

Вот мой код:

    byte = ""
    handleR = open(self.getInput())
    handleW = open(self.getOutput(), 'w')
    file = handleR.readlines()
    for line in file:
        for a in range(0, len(line)):
            chunk = result[ord(line[a])]
            for b in chunk:
                if (len(byte) < 8):
                    byte+=str(chunk[b])
                else:
                    char = chr(eval('0b'+byte))
                    print(byte, char)
                    handleW.write(char)
                    byte = ""
    handleR.close()
    handleW.close()

Любая помощь приветствуется,

Спасибо

1 Ответ

2 голосов
/ 25 июня 2010

Я думаю, что вы хотите:

handleR = open(self.getInput(), 'rb')
handleW = open(self.getOutput(), 'wb')

Это обеспечит чтение и запись потоков байтов. Также вы можете анализировать двоичные строки без eval:

char = chr(int(byte, 2))

И, конечно, было бы быстрее использовать битовую манипуляцию. Вместо добавления строки можно использовать << (сдвиг влево) и | (поразрядно или).

РЕДАКТИРОВАТЬ: Для фактического письма, вы можете использовать:

handleW.write(bytes([char]))

Создает и записывает байтов из списка, состоящего из одного числа.

РЕДАКТИРОВАТЬ 2: Исправление должно быть:

handleW.write(bytes([int(byte, 2)]))

Нет необходимости использовать chr.

...