天天看點

統計python代碼行數小工具

統計python代碼行數小工具

1 定義統計代碼行的函數(實作算法)

  1. 聲明變量分别存儲檔案個數、代碼總行數、空行數、注釋行數
  2. 使用os.walk周遊整個目錄
  3. 使用for file_name in files,拿到每個檔案的檔案名
  4. 使用os.path.join将目錄名和檔案名,拼成一個絕對路徑
  5. 用切片file_path[-3:] == “.py” 判斷是否為python代碼檔案
  6. 如果是的話,則檔案個數(file_count)+1
  7. with方式,使用絕對路徑,打開這個檔案
  8. 使用for周遊檔案的每一行,然後代碼總行數(line_count)+=1
  9. 如果每行使用strip()方法後為空,則表示為空行,空行數(empty_line_count)+1
  10. 使用切片,如果每行第一個字元line[0]為“#”,則表示該行為注釋行,注釋行數(comment_line_count)+1
import os
def get_count_codelines(dir_path):  #定義統計代碼行的函數
    file_count = 0
    all_line_count = 0
    empty_line_count = 0
    comment_line_count = 0
    for root, dirs, files in os.walk(dir_path):
        for file_name in files:
            file_path = os.path.join(root, file_name)
            if file_path[-3:] == ".py":     #判斷是否為python代碼檔案
                file_count += 1     #統計檔案個數
                with open(file_path, 'r', encoding="utf-8") as fp:
                    for line in fp:
                        all_line_count += 1      #統計所有的行數
                        if line.strip() == "":
                            empty_line_count += 1       #統計空行數
                        if line[0] == "#":
                            comment_line_count += 1     #統計注釋行數
    return (file_count,all_line_count,empty_line_count,comment_line_count)
           

2 使用Tkinter,做一個簡單的圖形界面

  1. 通過from tkinter import * 引用tkinter 包的所有方法
  2. 定義一個文本輸入框,用于輸入指定的目錄路徑
  3. 定義Button的事件處理函數,擷取指定目錄,并調用代碼統計函數,傳回代碼統計資訊
  4. 定義送出按鈕,并指定Button的事件處理函數
from tkinter import *
windows = Tk()
windows.title("統計代碼行數小工具")  #設定标題
windows.geometry("550x250")
L1 = Label(windows, text="輸入目錄路徑,點【送出】後進行代碼行統計")    #建立一個标簽,顯示提示資訊
E1 = Entry(windows, bd =5,width=200)    #定義文本框
L1.pack()
E1.pack()

def clicked():  #定義Button的事件處理函數
    dir_path=E1.get() #擷取文本框中的目錄路徑
    msg_codelines = get_count_codelines(dir_path)   #調用統計代碼行的函數
    file_count = msg_codelines[0]
    all_line_count = msg_codelines[1]
    empty_line_count = msg_codelines[2]
    comment_line_count = msg_codelines[3]
    L2.configure(text="代碼檔案總數:%s 個\n總代碼行:%s 行\n空行:%s 行\n注釋行:%s 行"
                      %(file_count,all_line_count,empty_line_count,comment_line_count))

button = Button(windows,text="送出",command=clicked)  #定義“送出”按鈕,并指定Button的事件處理函數
button.pack()
L2 = Label(windows,text = "",bg='white',width=200,height=10)    #建立一個标簽,用于展示統計的代碼行資訊
L2.pack()
windows.mainloop()
           

3 實作效果

  1. 未進行統計前效果
    統計python代碼行數小工具
  2. 輸入目錄路徑,送出統計後效果
    統計python代碼行數小工具