Python 實現代碼行數統計

快來算一算你寫了多少行代碼

前面我們一直在介紹圖形界面,這次換個口味,在命令行實現代碼行數統計程序。本程序共 135 行,其中 18 行空行、110 行有效代碼、7行註釋,大小為 7.71 KB。

Python 實現代碼行數統計

主要思路

通過 argparse 設置四個參數 -f, -p, -s, -r,其中 -f 表示單個 py 文件,-p 表示文件夾地址。-s 接排序的關鍵字,也就是根據哪個屬性顯示信息。默認情況下,信息按 total 關鍵字降序排序,我們可以通過加上 -r 參數來得到升序序列。

對於單個 Py 文件,我們首先以只讀方式讀取文件,按行讀取。每讀取一行,total + 1。如果該行長度為 0,blank + 1。如果以‘#’開頭,note + 1。否則的話,code + 1。其中,如果遇到單引號、雙引號或者三引號,程序要單獨計算這些註釋的行數,主循環直接跳過相應次數的迭代。最後,通過 format 字符串打印字符。其中,代碼要以英文命名,否則會顯示混亂。

解析參數

我們使用標準庫中的 argparse 來設置命令行參數。首先新建一個 parser 對象,並設置相應的提示信息。通過 group 對象添加的參數互斥,也就是說 -p -f 參數不能同時使用。parse_args() 用來獲取對象參數。

import argparse

def parse_args():
parser = argparse.ArgumentParser(usage='命令行統計代碼函數', description='統計文件夾或者單個文件信息')

group = parser.add_mutually_exclusive_group()
group.add_argument('-p', '--path', help='輸入你的文件地址', default='')
group.add_argument('-f', '--file', help='輸入你的文件名', default='')
parser.add_argument('-s', '--sort', help='排序', default='total')
parser.add_argument('-r', '--reverse', help='逆序:不需要參數', action='store_false', default=True)
args = parser.parse_args()
return args

基本判斷

簡單的判斷,有三個分支。長度為 0,blank + 1;以‘#’開頭,note + 1。如果既不是空行,也不是註釋,那麼代碼的行數 + 1。

if not len(line):
blank += 1
elif line.startswith('#'):
note += 1
else:
code += 1

註釋判斷

對於以引號開頭的行,我們就要小心了。

elif line.startswith('"' or '"""' or "'" or "'''"):
if line.startswith('"""') or line.startswith("'''"):
temp_note = process_note(lines[num:], line[:3])
else:
temp_note = process_note(lines[num:], line[0])
note += temp_note

我們需要 process_note 函數計算這些引號所佔的行數。從引號開始的那一行計數,一直都引號結束的地方停止計數,最後返回註釋的行數。

# 總行數 空行數 代碼行 註釋行 文件大小
def process_note(lines, symbol):
note = 0
for line in lines:
note += 1
line = line.strip()
if line.endswith(symbol):
break
return note

與之配合的代碼如下。對於引號所佔的行,我們可以直接跳過,繼續執行 for 循環。

if temp_note > 1:
temp_note -= 1
continue

要點就梳理到這裡了,具體代碼在後臺回覆2019420獲取。

寫文不易,還請大家多多轉發支持。


分享到:


相關文章: