通过python实现linux中的wc命令,学习python参数处理模块optparse
#!/usr/bin/env python # coding=utf-8 import sys, os from optparse import OptionParser def opt(): parser = OptionParser() parser.add_option("-c", "--char", dest="chars", action="store_true", default=False, help="only count chars") parser.add_option("-w", "--ward", 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="show total or not") 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.words or options.chars or options.lines): options.words, options.chars, options.lines = 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("%s: is a directory" % fn, file=sys.stderr) 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://xtbao.blog.51cto.com/7482722/1889772