1

一連のパスワードの頻度を分析しようとしています。私のスクリプトは他の入力メディアで動作していますが、現在のデータセットにいくつかの悪い文字があるようです。「悪い」データを回避するにはどうすればよいですか?

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

何か案は?

4

1 に答える 1

5

あなたのコードはあなたのエラーと正確には一致しませんが (デバッグしようとしていると思いますか?)、テキスト ファイルは違いますUTF-8

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

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

エラーがあっても続行したい場合は、errors='ignore'またはerrors='replace'に渡すことができますopen

于 2012-04-11T21:31:55.093 に答える