天天看點

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",

                     help="only count words")

    parser.add_option("-l", "--line",

                     dest="lines",

                     help="only count lines")

    parser.add_option("-n", "--nototal",

                     dest="nototal",

                     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()

      本文轉自M四月天 51CTO部落格,原文連結:http://blog.51cto.com/msiyuetian/1783267,如需轉載請自行聯系原作者