python使用optparse模块实现wc命令(二)

来源:互联网 发布:linux rc.local 日志 编辑:程序博客网 时间:2024/06/05 09:51

这是继上一篇的wc命令升级版,使用了optparse模块,可以带参数-l,-w,-c,下面是wc命令实现的效果:

[root@js python]# wc /etc/passwd  32   52 1530 /etc/passwd[root@js python]# wc -l /etc/passwd32 /etc/passwd[root@js python]# wc -w /etc/passwd52 /etc/passwd[root@js python]# wc -c /etc/passwd1530 /etc/passwd

下面是用python编写的程序:

[root@js python]# cat parse4.py#!/usr/bin/pythonimport sysimport osfrom optparse import OptionParserdef opt():    parser = OptionParser()    parser.add_option("-c","--char",                      dest="chars",                      action="store_true",                      default=False,                      help="only count chars")    parser.add_option("-w","--word",                      dest="words",                      action="store_true",                      default=False,                      help="only count words")    parser.add_option("-l","--line",                      dest="lines",                      action="store_true",                      default=False,                      help="only count lines")    options,args = parser.parse_args()    return options,argsdef get_count(data):    chars = len(data)    words = len(data.split())    lines = data.count('\n')    return lines,words,charsdef print_wc(options,lines,words,chars,fn):    if options.lines:        print lines,    if options.words:        print words,    if options.chars:        print chars,    print fndef main():    options,args = opt()    if not (options.lines or options.words or options.chars):        options.lines,options.words,options.chars =True,True,True    if args:        total_lines,total_words,total_chars = 0,0,0        for fn in args:            if os.path.isfile(fn):                with open(fn) as fd:                    data = fd.read()                lines,words,chars = get_count(data)                print_wc(options,lines,words,chars,fn)                total_lines += lines                total_words += words                total_chars += chars            elif os.path.isdir(fn):                print >>sys.stderr, "%s: is a directory\n" %fn            else:                sys.stderr.write("wc: %s No such file or directory\n" %fn)        if len(args) > 1:            print_wc(options,total_lines,total_words,total_chars,'total')    else:        data = sys.stdin.read()        fn = ''        lines,words,chars = get_count(data)        print_wc(options,lines,words,chars,fn)main()

简单测试一下:

[root@js python]# python parse4.py /etc/passwd32 52 1530 /etc/passwd[root@js python]# python parse4.py -l /etc/passwd  32 /etc/passwd[root@js python]# python parse4.py -wcl /etc/passwd32 52 1530 /etc/passwd[root@js python]# python parse4.py -wcl /etc/passwd /etc/hosts32 52 1530 /etc/passwd2 10 158 /etc/hosts34 62 1688 total[root@js python]# python parse4.py  /etc/passwd /etc/hosts32 52 1530 /etc/passwd2 10 158 /etc/hosts34 62 1688 total[root@js python]# cat /etc/passwd |python parse4.py 32 52 1530

基本实现了wc的功能,结束。

原创粉丝点击