2011年5月30日星期一

Grep for Windows - enumerate

今日看了這篇文章,才知道enumerate是這麼elegant,並不需要像其它language,在loop中+1(24和26行)。

import sys
import argparse
import glob
import re

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Grep string from text files or PIPE.')
    parser.add_argument('-i', '--ignore', action='store_const', const=re.I, default=0,
                        help='Ignore case (default: case sensitive)')
    parser.add_argument('pattern', help='Pattern')
    parser.add_argument('files', nargs='?', help='Wildcard filename')

    args = parser.parse_args()
    pattern = re.compile(args.pattern, args.ignore)
    if args.files is None:
        while True:
            line = sys.stdin.readline()
            if line:
                if pattern.search(line):
                    print(line.rstrip())
            else:
                sys.exit(0)
    for i in glob.glob(args.files):
        for l, line in enumerate(open(i, 'r'), 1):
            if pattern.search(line):
                print('{}:{} {}'.format(i, l, line.rstrip()))


沒有留言:

發佈留言