zoukankan      html  css  js  c++  java
  • 作业(二)—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)+'
    ')
        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)+'
    ')
        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)+'
    ') 
        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模块

  • 相关阅读:
    WebView.自动登录
    Android.对话框(AlertDialog/Toast/Snackbar)
    ubuntu解压rar
    sqlserver2005 存储过程模板及调用
    win7 32位下装oracle 10g报未知错误
    oracle下常用查询更新命令(身份证号判断男女,更新语句多表查询)
    如何建立一个android工程
    ubuntu14.04 配置android及sdk等相关操作
    mysql 常用简单的几个命令
    linux的tar简单使用
  • 原文地址:https://www.cnblogs.com/c1e4r/p/9696773.html
Copyright © 2011-2022 走看看