Python で cat | grep | wc -l を真似てみるテスト
cat クラスをコンベンションに従って書き換えていかないと機能強化できないのがいけてない.
from __future__ import with_statement from re import compile class cat(object): def __init__(self, filename): def _cat(filename): with open(filename) as f: for s in f: yield s.rstrip('\r\n') self.prev = _cat(filename) def grep(self, pattern): prev = self.prev def _grep(re): p = compile(re) for s in prev: if p.search(s): yield s self.prev = _grep(re) return self def wc_l(self): result = 0 for s in self.prev: result += 1 return result print cat('access.log').grep('POST').wc_l()
テスト
$ time ./test.py 25775 real 0m12.120s user 0m11.342s sys 0m0.749s $ time grep 'POST' access.log | wc -l 25775 real 0m1.181s user 0m0.747s sys 0m0.545s
おけーい.