首页 > 代码库 > 使用Python实现Linux系统wc命令,效果一样

使用Python实现Linux系统wc命令,效果一样

代码如下:

#!/usr/bin/python
#*-*coding:utf8*-*

import sys
import os
from optparse import OptionParser

"""定义参数"""
parser = OptionParser()
parser.add_option("-l", "--line",
                  dest="lines",
                  action="store_true",
                  default=False,
                  help="only count lines")
parser.add_option("-w", "--word",
                  dest="words",
                  action="store_true",
                  default=False,
                  help="only count words")
parser.add_option("-c", "--char",
                  dest="chars",
                  action="store_true",
                  default=False,
                  help="only count chars")
parser.add_option("-n", "--nototal",
                  dest="nototal",
                  action="store_true",
                  default=False,
                  help="no count total")
options, args = parser.parse_args()

"""根据指定不同选项显示不同的值"""
def display(l, w, c):
    global total_l
    total_l += l
    global total_w
    total_w += w
    global total_c
    total_c += c
    if not (options.words or options.chars or options.lines):
        print(l),
        print(w),
        print(c),
    if options.lines:
        print(l),
    if options.words:
        print(w),
    if options.chars:
        print(c),

"""针对文件特殊处理,如果是1个文件以上那么需要输入一个Total总和"""
def dir(data):
    if not os.path.exists(data):
        sys.stderr.write("%s No such file or directory\n" %data)
        return False
    if os.path.isdir(data):
        sys.stderr.write("%s Is a directory\n" %data)
        return False
    return True
        
def readFile(data):
    for f in data:
        b = dir(f)
        if b:
            with open(f) as files:
                fd = files.read()
                l = fd.count("\n")
                w = len(fd.split())
                c = len(fd)
                display(l, w, c)
                print(f)
        else:
            continue
    if (len(args) > 1) and (not options.nototal):
        l = total_l
        w = total_w
        c = total_c
        display(l, w, c)
        print("Total")

total_l = 0
total_w = 0
total_c = 0

if len(args) == 0:
    data = sys.stdin.read()
    l = data.count("\n")
    w = len(data.split())
    c = len(data)
    display(l, w, c)
else:
    data = args
    readFile(data)


执行结果如下:

技术分享


使用Python实现Linux系统wc命令,效果一样