Python readline не работает с кодеками

Я пытаюсь открыть, распечатать и прочитать текстовый файл, содержащий специальные символы, такие как §. Ниже приведен код, который я запускаю:

    import codecs
    f = codecs.open('sample_text.txt', mode='r', encoding='utf_8')
    print f.readline()

Первые две строчки работают, а третья - нет. Код ошибки говорит: Traceback (последний вызов последним):

"C:\Users\mallikk\Documents\Python Scripts\special_char_test.py", line 6, in <module>
    print f.readline()
  File "C:\Anaconda2\lib\codecs.py", line 690, in readline
    return self.reader.readline(size)
  File "C:\Anaconda2\lib\codecs.py", line 545, in readline
    data = self.read(readsize, firstline=True)
  File "C:\Anaconda2\lib\codecs.py", line 492, in read
    newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa7 in position 13: invalid start byte

Есть идеи? Пожалуйста, дайте мне знать, если я могу уточнить что-нибудь или добавить более подробную информацию. Спасибо вам большое!

2 ответа

Решение

Чтобы расширить сказанное комментаторами, вам необходимо выяснить кодировку вашего файла. Самый простой способ, которым я знаю, это сделать:

  1. Откройте файл в Firefox.
  2. Щелкните правой кнопкой мыши на странице и выберите "Просмотр информации о странице".
  3. Посмотрите, что такое "Кодировка текста".
  4. Затем вы можете проверить документацию по кодекам для использования кодека вместо utf_8 в вашем f = codecs.open(...) линия.

Снимок экрана шагов 1–3:

Скриншот

Похоже, что вы находитесь на компьютере с Windows, где кодировка для текстового файла может отличаться от UTF-8, вы можете попробовать использовать cp1252/ISO-8859-1 для декодирования строки байтов, а затем снова закодировать ее, используя utf-8.

Вы также можете посмотреть здесь советы о том, как лучше читать файлы - Разница между open и codecs.open в Python

Другие вопросы по тегам