这是继上一篇的wc命令升级版,使用了optparse模块,可以带参数-l,-w,-c,下面是wc命令实现的效果:
[root@js python]# wc /etc/passwd
32 52 1530 /etc/passwd
[root@js python]# wc -l /etc/passwd
32 /etc/passwd
[root@js python]# wc -w /etc/passwd
52 /etc/passwd
[root@js python]# wc -c /etc/passwd
1530 /etc/passwd
下面是用python编写的程序:
[root@js python]# cat parse4.py
#!/usr/bin/python
import sys
import 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","--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")
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\n" %fn
else:
sys.stderr.write("wc: %s No such file or directory\n" %fn)
if len(args) > 1:
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()
简单测试一下:
[root@js python]# python parse4.py /etc/passwd
32 52 1530 /etc/passwd
[root@js python]# python parse4.py -l /etc/passwd
32 /etc/passwd
[root@js python]# python parse4.py -wcl /etc/passwd
32 52 1530 /etc/passwd
[root@js python]# python parse4.py -wcl /etc/passwd /etc/hosts
32 52 1530 /etc/passwd
2 10 158 /etc/hosts
34 62 1688 total
[root@js python]# python parse4.py /etc/passwd /etc/hosts
32 52 1530 /etc/passwd
2 10 158 /etc/hosts
34 62 1688 total
[root@js python]# cat /etc/passwd |python parse4.py
32 52 1530
基本实现了wc的功能,结束。