1. 程式人生 > >作業(二)—python實現wc命令(未完待續)

作業(二)—python實現wc命令(未完待續)

output 努力 結果 -o clas ati 符號 字符數 ref

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模塊

作業(二)—python實現wc命令(未完待續)