作业(二)—python实现wc命令

Gitee地址:https://gitee.com/c1e4r/word-count(为什么老师不让我们用github)

0x00 前言

      好久没发博客了,感觉自己的学习是有点偷懒了。这篇博客也是应专业课程老师作业硬性的要求才发的,希望借这次机会,自己能够再次出发,努力向前吧。

0x01 作业思路

  老师在课堂上布置了一个作业,总的来说是对一个源文件进行各方面的字符统计,涉及到了文件和字符读取等操作。具体要求如下:

 

其实要求很简单,主要就是文件读写操作,又必须是用命令行进行,python中自带的sys库和getopt库可以从命令行中获取参数,所以就果断用python来解决了。

0x02 基本实现过程

  基本功能只有三个:统计源文件字符,统计源文件单词,统计源文件行数

  所以就只需要写三个功能函数加上一个主函数即可实现其功能。话不多说,直接先贴代码:

#Author:c1e4r

import sys
import getopt

#读取指定文件中的字符数
def read_str(file2):
    file = sys.argv[-1]
    file1 = open(file,'r+')
    count = 0
    for line in file1.readlines():
        count_line = len(line)
        count += count_line
    f = open(file2,'a+')
    f.write(file+",字符数:"+str(count)+'\n')
    file1.close()
    f.close()

#读取指定文件中的单词数
def read_word(file2):
    file = sys.argv[-1]
    file1 = open(file,'r+')
    count = 0
    for line in file1.readlines():
        line = line.replace(","," ")
        line = line.replace("."," ")
        line = line.replace("!"," ")
        line = line.replace("?"," ")
        line_word = len(line.split( ))
        count += line_word 
    f = open(file2,'a+')
    f.write(file+",单词数:"+str(count)+'\n')
    file1.close()
    f.close()

#读取指定文件中的行数
def read_line(file2):
    file = sys.argv[-1]
    file1 = open(file,'r+')
    count = 0
    for line in file1.readlines():
        count += 1
    f = open(file2,'a+')
    f.write(file+",行数:"+str(count)+'\n') 
    file1.close()
    f.close()
    
def main():
    file = "result.txt"
    try:
        opts, args = getopt.getopt(sys.argv[1:],"hc:w:l:o:")
    except getopt.GetoptError:
        print("test.py [parameter] [input_file_name]")
        sys.exit(2)
    finally:
        pass
    for opt,arg in opts:
        if opt == '-h':
            print("test.py -c -w -l -o <outputfile> [input_file_name]") # -h 使用说明
            sys.exit()
        elif opt == "-c": 
            read_str(file)  # -c 返回文件的字符数
        elif opt == "-w":
            read_word(file) # -w 返回文件的单词总数
        elif opt == "-l":
            read_line(file) # -l 返回文件的总行数
        elif opt == "-o":
            file = arg      # -o 输出结果的文件   
  
if __name__ == "__main__":
    main()

其中稍微有点棘手的是统计文件中的单词数量。因为单词和单词之间不一定是空格(可能是各种标点符号),所以就先把每一行中的标点符号替换成空格,最后用split切割,这样每个单词就被筛选出来了

    for line in file1.readlines():
        line = line.replace(","," ")
        line = line.replace("."," ")
        line = line.replace("!"," ")
        line = line.replace("?"," ")
        line_word = len(line.split( ))

 

其他的功能其实就是一个逐行读然后计算的过程,很基础,所以就不做解析了。

0x04 效果截图

程序的效果如下:

 

 

 后面还要求做个图形化界面。。。我还是老老实实加油学安全吧。

 

参考文献:   Python命令行参数和getopt模块

posted @ 2018-09-24 21:23 c1e4r 阅读(...) 评论(...) 编辑 收藏