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 ответа
Чтобы расширить сказанное комментаторами, вам необходимо выяснить кодировку вашего файла. Самый простой способ, которым я знаю, это сделать:
- Откройте файл в Firefox.
- Щелкните правой кнопкой мыши на странице и выберите "Просмотр информации о странице".
- Посмотрите, что такое "Кодировка текста".
- Затем вы можете проверить документацию по кодекам для использования кодека вместо
utf_8
в вашемf = codecs.open(...)
линия.
Снимок экрана шагов 1–3:
Похоже, что вы находитесь на компьютере с Windows, где кодировка для текстового файла может отличаться от UTF-8, вы можете попробовать использовать cp1252/ISO-8859-1 для декодирования строки байтов, а затем снова закодировать ее, используя utf-8.
Вы также можете посмотреть здесь советы о том, как лучше читать файлы - Разница между open и codecs.open в Python