python實現統計程式碼行數的小工具
阿新 • • 發佈:2020-01-09
一個用python實現的統計程式碼行數的小工具,供大家參考,具體內容如下
實現功能
- 計算出某一目錄以及子目錄下程式碼檔案的行數
- 在計算程式碼的過程中,只對標準命名的檔案進行統計,如[檔名.檔案型別]
- 排除了以“#”開頭的包含檔案,巨集定義等,如#include,#define,#pragma等
- 排除了c,cpp檔案中的“//”,“/…/”等的註釋
- 排除了python檔案中import,from 等開頭的匯入
使用方法
新建countLines.py檔案,複製程式碼到檔案中,將其放在想計算行數的程式碼目錄下,直接使用Python執行即可算出該目錄以及所有子目錄下程式碼檔案的行數。
1.將該python檔案命名為countLines.py,放到想計算程式碼行數的檔案目錄下
2.其中helloworld.c檔案內容如下:
3.用python.exe直接開啟該檔案或者使用python countLines.py,執行檔案即可。
我們可以看到,統計程式碼行的時候我們排除了兩個空行以及開頭的包含檔案行,因此有效程式碼行為5行
程式碼實現
#!/usr/bin/env python # -- coding: utf-8 -- # @Time : 2018/3/5 13:55 # @Author : likewind # @mail : [email protected] # @File : countLines.py # @Software: sky-studio.cn import os ''' 返回每個檔案行數,其中行數不包括以“#”開頭的包含檔案,巨集定義等, 排除了c,“/*...*/”等的註釋, 排除了python檔案中import,from 等開頭的匯入 ''' def get_lines(file_name): f = open(file_name) #flag用於處理c,cpp中“/*...*/”多行註釋 flag = False count = 0 while True: #讀取檔案並去除開頭的空格,製表符 line = f.readline() line = line.lstrip(' \t') if not line: break #如果該行有“#”, “import”等打頭的字元,忽略該行 if flag == False: if line[0:1] == "#" or line[0:6] == "import" or line[0:4] == "from" or line == "\n" or line[0:2] == "//": continue #如果該行存在“/*”並且不存在“*/”,表明多行註釋未在一行結束,flag=True if line.find("/*") != -1 : if line.find("*/") != -1: continue else: flag = True continue #如果flag=True,表明處於多行註釋中,判斷是否有“*/”結尾 if flag == True : if line.find("*/") != -1: flag = False if line[-2:] != "*/": count = count+1 continue #排除以上條件後,行數增加一 count = count+1 f.close() return count ''' 計算該檔案目錄下所有符合條件的行數 ''' def count_lines(file_dir): #total_lines表示總行數,file_nums表示總檔案數 total_lines = 0 file_nums = 0 for root,dirs,files in os.walk(file_dir): for file in files: #不計算本檔案的行數 if file == "countLines.py": continue #只計算規範命名檔案,如[檔名.檔案型別] file_type = file.split('.') if len(file_type) > 1 : #如果想計算其他型別的檔案,可以在這裡進行修改 if file_type[1] not in ["py","c","cc","cpp","h"]: continue else: continue file_name = root +"\\" + file lines = get_lines(file_name) total_lines = total_lines + lines print file_name + " contains lines : " + repr(lines) file_nums = file_nums + 1 #輸出結果 print "------------------------------------" print "Total Files : " + repr(file_nums) print "Total lines : " + repr(total_lines) print "------------------------------------" if __name__ == '__main__': cur_path = os.path.split(os.path.realpath(__file__))[0] count_lines(cur_path) raw_input("Press any key to exit...")
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。