Я пишу программу, которая принимает текстовый файл и создает другой текстовый файл, где: 1. Швейцарские буквы отформатированы правильно. 2. Все слова, которые не являются алфавитами, удаляются. 3. Все заглавные буквы были преобразованы в строчные буквы.UnicodeDecodeError при изменении текстового файла
Это мой код:
import string
infile = open("unigram.wfreq","r")
outfile = open("bigram.txt","w")
line = "Start"
while line != "":
line = infile.readline()
wordandcount = line.split()
word = wordandcount[0]
##Fix å ä ö.
## å == √• ä == √§ ö == √∂
if "å" in word or "ä" in word or "ö" in word:
word = word.replace("√•","å")
word = word.replace("√§","ä")
word = word.replace("√∂","ö")
if word.isalpha():
word = word.lower()
outfile.write(word+"\n")
print(line)
А вот пример из моего unigram.wordfreq файла:
gruppselektion 4
lating 1
Morsing 2
varuhusen 7
FULLT 8
latino 3
mammutslätten 2
föglömma 1
varuhuset 47
livsnjutningen 1
nedtoning 1
Когда я запускаю файл, я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "formater.py", line 13, in <module>
line = infile.readline()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 2732-2733: invalid continuation byte
Если я смотрю на конец вывода терминала, я вижу следующее:
Omgångsstarten 1
nationssplittring 1
Handtvätten 1
Three 47
domherre 1
http://www.dryden.se 1
Getryggarna 1
mineraloljor 21
Если я нахожу этот сегмент в файле unigram.wordfreq я ожидаю увидеть слово, вызвавшего ошибку сразу после mineraloljor (правильно?), Но я вижу это:
Getryggarna 1
mineraloljor 21
MAYHEM 1
avvänjer 1
tilltrasslad 1
EUROPEISKT 1
Сразу после mineraloljor
, есть MAYHEM
. Я не понимаю, почему это слово должно вызывать ошибку, в этом нет ничего особенного!
Как я могу решить эту ошибку и продолжить форматирование всего файла?
Какая кодировка имеет файл? Похоже, Python пытается прочитать его как UTF-8 и терпит неудачу. – Lav