python版WC

#!/usr/bin/env python
#coding:utf8
from optparse import OptionParser
import sys,os
def 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") 
    parser.add_option("-n","--no-total",
                      dest="nototal",
                      action="store_true",
                      default=False,
                      help="no total")
    options,args = parser.parse_args() 
    return options,args
'''參數模塊'''
def get_count(data):
    chars = len(data)
    words = len(data.split())
    lines = data.count('\n')
    return lines,words,chars
'''統計模塊'''    
def print_wc(options,lines,words,chars,fn):
    if options.lines:
        print lines,
    if options.words:
        print words,
    if options.chars:
        print chars,
    print fn
'''判斷參數'''
def 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" %fn
            else:
                sys.stderr.write("%s: No such file or direcotry\n" %fn)
        if len(args) > 1 and not options.nototal:
            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)
if __name__ == '__main__':
    main()

http://www.laomaotao.net/?D3103

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章