Ich lese in einer Textdatei. Ich habe es mit python2 gut gemacht, aber ich entschied mich, stattdessen meinen Code mit python3 auszuführen.
Mein Code zum Lesen der Textdatei lautet:
neg_words = []
with open("negative-words.txt", "r") as f:
for word in f:
neg_words.append(word)
Wenn ich diesen Code auf Python 3 ausführen, erhalte ich die folgende Fehlermeldung:
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-14-1e2ff142b4c1> in <module>()
3 pos_words = []
4 with open("negative-words.txt", "r") as f:
----> 5 for word in f:
6 neg_words.append(word)
7 with open("positive-words.txt", "r") as f:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py in
decode(self, input, final)
319 # decode input (taking the buffer into account)
320 data = self.buffer + input
--> 321 (result, consumed) = self._buffer_decode(data, self.errors, final)
322 # keep undecoded input until the next call
323 self.buffer = data[consumed:]
UnicodeDecodeError: "utf-8" codec can"t decode byte 0xef in position 3988: invalid continuation byte
Es scheint mir, dass es eine bestimmte Form von Text gibt, die python2 ohne Probleme dekodiert, was python3 nicht kann.
Könnte jemand bitte erklären, was der Unterschied zwischen Python2 und Python3 in Bezug auf diesen Fehler ist. Warum kommt es in einer Version vor, aber nicht in der anderen? Wie kann ich damit aufhören?
Antworten:
4 für die Antwort № 1Ihre Datei ist nicht utf-8-codiert. Finden Sie heraus, welche Kodierung verwendet wird, und zwar speziell beim Öffnen der Datei:
with open("negative-words.txt", "r", encoding="<correct codec>") as f:
In Python 2 str
ist ein binäre Zeichenfolge, die verschlüsselte Daten enthalten, nicht Unicode-Text. Wenn du verwenden würdest import io
dann io.open()
Sie würden die gleichen Probleme bekommen, oder wenn Sie versuchen würden, die Daten zu decodieren, mit denen Sie gelesen haben word.decode("utf8")
.
Sie möchten wahrscheinlich Unicode und Python kennenlernen. Ich empfehle Ned Batchelder´s dringend Pragmatischer Unicode.