1日200通ほどのスパムメールが来る。ほとんどのスパムメールはフィルターを通して処理されるので実害は少ないが、気持ちの良いものではない。ふと、複数のメールアカウントを使っていてどのアカウントが一番被害があるのかちょっと気になったので、メールアドレスごとにスパムメールを数え上げ、数の多い順に表示するPythonプログラムを書いてみた。Pythonらしからぬばっちぃコードなのであまりコーディングの参考にしないこと。 import re def read_spam(fname, pattern): data = [] for d in [[s for s in l.replace(":", " ").replace(" ", " ").strip().rstrip().split()[1:] if not re.search("\"", s) if re.search(".+@.+", s)] for l in file(fname) if re.search(pattern, l)]: data.extend(d) data_counts = {} for d in set(data): data_counts[d] = data.count(d) for d in sorted(data_counts, cmp=lambda x, y: cmp(data_counts[x], data_counts[y]), reverse=True): print "%5d %s" % (data_counts[d], d) 普段はThunderbirdを利用しており、デフォルトではスパムメールはJunkファイルに落とされる。その場合、以下のように実行すればOK。 read_spam("Junk", "^To: ") 以下のように表示される。 4652 [email protected] 3745 [email protected] 2176 [email protected] 1819 [email protected] 686...