python实现wc命令(一)

本文介绍了如何使用Python编写三个不同的程序来复现Linux中wc命令的功能,包括统计文本的行数、单词数和字符数。这些程序分别通过标准输入接收数据、通过文件路径读取文件内容以及同时支持这两种方式。

wc这个命令可以实现对文件行数、单词数、字节数等的统计。

[root@js python]# wc
hello
good morning
      2       3      20
[root@js python]# wc /etc/passwd
  32   52 1530 /etc/passwd

下面写一个吧简单的程序来实现这个功能。
程序一:
通过标准输入来获取内容并统计:

[root@js python]# cat wc2.py
#!/usr/bin/env python
import sys
data = sys.stdin.read()
lines  = data.count('\n')
words = len(data.split())
chars = len(data)
print "%(lines)s %(words)s %(chars)s" %locals()

执行:

[root@js python]# python wc2.py
hello
world i am
2 4 18          

程序二:
通过参数形式获取文件:

[root@js python]# cat argv2.py
#!/usr/bin/python
import sys
import os
try:
    fn = sys.argv[1]
except IndexError:
    print "please follow a argument after %s" %__file__
    sys.exit()
if not os.path.exists(fn):
    print " %s is not exists" %fn
    sys.exit()
with open(fn) as fd:
    data = fd.read()
    lines = data.count('\n')
    words = len(data.split())
    chars = len(data)
print "%(lines)s %(words)s %(chars)s" %locals()

执行:

[root@js python]# python argv2.py /etc/hosts
2 10 158
[root@js python]# python argv2.py /etc/fadjsfd
 /etc/fadjsfd is not exists

程序三:
既可以通过标准输入来获取内容并统计,又可以通过参数形式获取文件:

[root@js python]# cat hb2.py
#!/usr/bin/env python
import sys
import os
if len(sys.argv) == 1:
    data = sys.stdin.read()
else:
    try:
        fn = sys.argv[1]
    except IndexError:
        print "please follow a argument after %s" %__file__
        sys.exit()
    if not os.path.exists(fn):
        print "%s is not exists" %fn
        sys.exit()
    with open(fn) as fd:
        data = fd.read()

lines = data.count('\n')
words = len(data.split())
chars = len(data)
print "%(lines)s %(words)s %(chars)s" %locals()

执行:
1、通过标准输入来获取内容

[root@js python]# python hb2.py
where arre
you
2 3 16

2、通过参数形式获取文件

[root@js python]# python hb2.py /etc/passwd
32 52 1530
[root@js python]# python hb2.py /etc/231wdas
/etc/231wdas is not exists

到此为止 ,实现了wc的统计lines,words,chars功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值