pythonで文字列の探索(grep.py)
grepコマンドのような振る舞いをするコードを書いた。動作は以下の通り
- マッチした行を表示する際に行番号も一緒に表示する
- 引数が1つの場合には標準入力をフィルタする
- それ以上の場合は2つ目移行の引数をファイル名として扱ってフィルタする
- その際には、stderrにファイル名を表示する。
% python grep.py invalid argumentscat grep.py | python grep.py def 3: def grep(itr, rx): 10: def fgrep(file, rx): 15: def iogrep(rx): % python grep.py def nabe.py def.py fetch_page.py stop_watch.py wordhist.py grep.py tag_eraser.py get_cmdline_args.py --file:nabe.py-- 2: def nabe(n): --file:def.py-- 0: def f(): 3: def g(): --file:fetch_page.py-- --file:stop_watch.py-- 7: def __init__(self,print_func, dt): 11: def run(self): 13: def timer_count(beg_time): 22: def print_time(time): --file:wordhist.py-- 10: def cached_open(url, cache='cache.html', convertEntities=None): 16: def write_file(data,name): 26: def hist(s): --file:grep.py-- 3: def grep(itr, rx): 10: def fgrep(file, rx): 15: def iogrep(rx): --file:tag_eraser.py-- 10: def __init__(self, soup): 13: def itr(self):
2>/dev/nullとしてやればファイル名は除去できる。
これで学んだこと
正しいか分からないけど思ったこと(あとで調べる)
__iter__を持っているオブジェクトはforループで回せる?