用python 实现linux 的wc 命令

#!/usr/bin/env python

"""file name: opt_wc.py"""
 
import os
import sys
from optparse import OptionParser
 
def opt():
    parser = OptionParser()
 
    parser.add_option("-c", "--chars",
                      dest = "chars",
                      action = "store_true",
                      default = False,
                      help = "only count chars.")
    parser.add_option("-w", "--words",
                      dest = "words",
                      action = "store_true",
                      default = False,
                      help = "only count words.")
    parser.add_option("-l", "--lines",
                      dest = "lines",
                      action = "store_true",
                      default = False,
                      help = "only count lines.")
    parser.add_option("-n", "--nototal",
                       dest = "nototal",
                       action = "store_true",
                       default = False,
                       help = "not print total count.")
    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.chars or options.words or options.lines):
        options.chars, options.words, options.lines = 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.total:
                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)
 
if __name__ == ‘__main__‘:
    main()

主要利用了optparse 里的OptionParser 模块,自定义选项。在这里,只定义了-l,-c,-w 三种命令,对应wc 命令的-l,-w,-c 三个命令,分别是统计行数,单词数和字符数。通过OptionParser 模块自定义的命令,python 版本的wc 命令也可以达到linux 命令wc 的效果。

optparse用法详解:

1. 创建OptionParser 对象,如 parser = OptionParser()

2. 调用parser 对象的add_option() 方法,自定义选项:

parser.add_option("-c",

"--chars",

dest = "chars",

action = "store_true",

default = False,

help = "only count chars.")

"-c"和"--chars"相当于短命令和长命令的区别。

dest 对象存储的值。

action 当解释到命令时会如何保存。一般有默认的三种情况,"store"、"store_true"、"stor_false":

当是"store"时,如果命令后还有值时,会将它保存在dest 声明的那个存储变量,例如<your_script> -c  /etc/hosts; 则将"/etc/hosts"保存在chars 里。

当是"store_true"时,如果解释到-c 命令,则‘chars‘ : True;

当是"store_false"时,如果解释到-c 命令,则‘chars‘ : False;

default: action参数的默认取值

help: 相当于帮助信息

3. 当所有需要自定义的命令都已经准备好了,就可以调用parser.parse_args() 方法,这个方法返回两个值,options 和args 。

options 是一个字典dict的形式,这个字典的key 都是以上自定义的命令的dest值。例如,在这个例子里自定义了-c,-w,-l 三种命令选项,它们的action 都是"store_True",当输入有某一个命令时,它对应的存储变量的值就是True , 所以当以这种方式  python  opt_wc.py  -c 执行脚本的时候,就会获取到options 的值:[‘chars‘: True, ‘words‘: Flase, ‘lines‘: False].通过这个字典,就可以知道脚本要处理的命令是哪些了。

parser.parse_args()方法返回的第二个变量是args, 它是一个列表list,保存了命令行里除了-c,-l和--chars,--lines 这种短命令和长命令以外的参数值。例如命令行 python opt_wc.py  -l /etc/hosts /etc/passwd ,那么args = [‘/etc/hosts‘, ‘/etc/passwd‘], 通过parse_args()方法返回的args 就可以知道脚本需要处理的文件。

wc 命令的扩展版本:增加了-n, --nototal 的选项,如果在命令行添加-n 选项,则输入多个文件也不统计总数。

python 脚本运行效果:

默认统计行数、字符数、单词数:

统计两个文件:

只统计行数:

输出错误处理:

时间: 2024-10-28 22:54:53

用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&quo

linux shell wc 命令

1. 语法与选项 Short Option Long Option Option Description -c –bytes print the byte counts -m –chars print the character counts -l –lines print the newline counts   –files0-from=F read input from the files specified by NUL-terminated names in file F -L –ma

linux之wc命令详解

Linux系统中wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式 wc [options] 文件... 2.命令功能 统计指定文件中的字节数.字数.行数,并将统计结果显示输出.该命令统计指定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取. wc同时也给出所指定文件的总统计数. 3.命令参数 -c 统计字节数 -l 统计行数 -m 统计字符数.这个参数不能与 -c 参数一起使用. -w 统计字数.一个字被定义为空白.

Python写了一个WC命令

Python 写了一个收发数据用的一个wc命令,更多学习交流请加365534424 ,直接上代码 #!/usr/bin/env python # coding:utf-8 # author: 51reboot.com # QQ群:365534424 from optparse import OptionParser import os class Wc(object):     def __init__(self):         self.n = 0              # line 

linux下wc命令详解

今天遇到了wc命令,现在就把自己了解到,叙述如下: 首先,这个命令很好记,至于问为什么,这个自己去想吧! 接下来,就把它的主要用法列举如下: wc -m filename:显示一个文件的字符数 wc -c filename:显示一个文件的字节数 wc -l filename:显示一个文件的行数 wc -L filename:显示一个文件中的最长行的长度 wc -w filename:显示一个文件的字数 至于具体的使用,这里就不再列举,感兴趣的可以自己去man或者钩钩一下!

linux中wc命令用法

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数.字数.行数,并将统计结果显示输出.该命令统计指定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所指定文件的总统计数. 3.命令参数: -c 统计字节数. -l 统计行数. -m 统计字符数.这个标志不能与 -c 标志一起使用. -w 统计字数.一个字被定义为由空白.

Linux下wc命令研究

wc word count  文本统计命令 是Linux用来统计数字的小命令 会输出3个数字,分别是 行  单词  字节 这里 行:  包括空行 单词:不包括空白符,不包括结束符$ 字节:包括空白符,包括结束符$ 1字节 其主要参数和特性如下 命令     关键字           解释及特性 -l  line 只显示行 -w word  只显示单词 -c bytes count 只显示字节数 (包括结束符1字节) -m  chars(任性) 只显示字符数(包括结束符1字符) -L line

解决python执行linux查看文件命令后,因为^@特殊符号导致部分内容不显示的问题

问题现象 文件a的内容如下: 查看第2行到第5行的内容:sed -n '2,5p' /tmp/test/a 可见在命令行执行,是没有问题的. 在python中使用paramiko模块执行linux命令,主要代码如下: def toServer(self, str): sys.setdefaultencoding('utf-8') return str.decode('utf-8').encode('GB18030') def fromServer(self, str): sys.setdefau

【linux】wc命令

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项][文件] 2.命令参数: -c char统计字节数. -l line统计行数. -w word显示单词数 [[email protected] ~]# cat 1 |wc -l 7 [[email protected] ~]# cat 1 |wc -c 115 [[email protected] ~]# cat 1 |wc -w 15