2012-04-11 11 views
1

私は頻度のための一連のパスワードを分析しようとしています。私のスクリプトは他の入力メディアと連携していますが、私の現在のデータセットにはいくつかの悪い文字があるようです。 「悪い」データをどうやって乗り越えることができますか?文字列処理エラー:UnicodeDecodeError: 'utf8'コーデックがデコードできません

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) 

私はエラーを取得:

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 

任意のアイデア?

答えて

5

あなたのコードはあなたのエラーと正確に一致しません(私はデバッグを試みますか?)、あなたのテキストファイルはUTF-8ではありません。

は手動で私の最高の推測では、latin-1ことで、エンコーディングを指定する必要があります。

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

あなたはエラーが発生しても継続したい場合は、あなたがopenerrors='ignore'またはerrors='replace'を渡すことができます。

+0

上記は役に立ちましたが、最終的に問題を解決しなかったので、私はギリシャ語のエラーに遭遇しました(私はプログラミングが初めてです)。テキスト・エディタで単語リストを開き、utf-8形式で保存し直しました。あなたの助けにagfに感謝! – AlphaTested

+0

@AlphaTestedエンコーディングが分からない場合は、[chardet](http://pypi.python.org/pypi/chardet)を使ってエンコーディングを検出する方法もあります。 – agf

+0

ああ、そうです。ありがとう。 – AlphaTested

関連する問題