2012-04-11 23 views
1

Ich versuche, eine Reihe von Kennwörtern für Häufigkeit zu analysieren. Mein Skript arbeitet mit anderen Eingabemedien zusammen, es scheint jedoch, dass in meinem aktuellen Datensatz einige fehlerhafte Zeichen enthalten sind. Wie kann ich die "schlechten" Daten umgehen?String-Verarbeitung Fehler: UnicodeDecodeError: 'utf8' Codec kann nicht

import re 
import collections 
words = re.findall('\w+', open('rockyou.txt').read().lower()) 
a=collections.Counter(words).most_common(50) 
for word in a: 
    print(word) 

ich dann den Fehler:

Traceback (most recent call last): 
    File "shakecount.py", line 3, in <module> 
    words = re.findall('\w+', open('rockyou.txt').read().lower().ASCII) 
    File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/codecs.py", line 300, in decode 
    (result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf1 in position 5079963: invalid continuation byte 

Irgendwelche Ideen?

Antwort

5

Ihr Code stimmt nicht genau mit Ihrem Fehler überein (ich nehme einen Debugging-Versuch an?), Aber Ihre Textdatei ist nicht UTF-8.

Sie müssen manuell eine Codierung angeben, mit meiner besten Vermutung latin-1 sein:

words = re.findall('\w+', open('rockyou.txt', encoding='latin-1').read().lower()) 

, wenn Sie trotz Fehler fortsetzen mögen, Sie errors='ignore' oder errors='replace'-open passieren können.

+0

Das obige war hilfreich, aber löste das Problem letztlich nicht, ich lief auf mehr griechische Fehler (ich bin neu in der Programmierung). Ich habe die Wortliste in einem Texteditor geöffnet und als utf-8-Format neu sortiert, was dann funktioniert hat. Danke an Agf für Ihre Hilfe! – AlphaTested

+0

@AlphaTested Wenn Sie die Kodierung nicht kennen, wäre eine andere Möglichkeit, [chardet] (http://pypi.python.org/pypi/chardet) zu verwenden, um es zu erkennen. – agf

+0

Ah, ich verstehe. Vielen Dank. – AlphaTested

Verwandte Themen