2312123www 发表于 2016-5-26 08:41:06

Python:完整版 wc

此 Python 脚本基本上实现了 Linux 系统里 wc 命令的全部功能
vim wc.py

#!/usr/bin/python

import os
import sys
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", "--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", "--nototal",
                     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.lines or options.words or options.chars):
      options.lines, options.lines, 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 directory\n" % fn)
      if len(args) > 1:
            if 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)

main()

页: [1]
查看完整版本: Python:完整版 wc