本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一个目录里面多个python程序文件,统计一下里面有多少行代码。即分别列出:代码、空行、注释的行数。
题目
一个目录里面多个python程序文件,统计一下里面有多少行代码。即分别列出:代码、空行、注释的行数。
代码
在该题目中首先运用了readlines函数逐行读入数据,接着再通过strip函数去出每行代码的首尾空白部分,最后再每行数据中识别是否为空与是否为“#”开头,从而识别数据中的空行与注释行的数量。由于“#”不在开头的代码情况较多,不一定为注释,因此我们只记录以“#”开头的数据为注释行,这也是其不足所在。
fp = open("hanshu2.py",encoding = 'utf-8')
codeNum = len(open("hanshu2.py",encoding = 'utf-8').readlines()) #统计行数
spaceNum = 0
noteNum = 0
for readFP in fp.readlines():
readFP = readFP.strip()
if readFP == "":
spaceNum += 1
if readFP.startswith("#"):
noteNum += 1
print("\n该文件共有%d行代码" %codeNum)
print("其中%s行空行" %spaceNum)
print("其中%s行注释" %noteNum)
也可以通过os遍历整个文件夹读取文件,从而获取文件的行数
import os
Max_Num = 0 # 最大行数
Min_Num = 1000000 # 最小行数
File_Num_Avg = 0 # 所有文件平均行数
All_File_Num = 0 # 文件夹中文件数总和
All_File_Row = 0 #所有文件代码行数总和
for base_path, folder_list, file_list in os.walk('C:/XXXXX'):
All_File_Num += len(file_list)
#进入文件夹
for file_name in file_list:
file_path = os.path.join(base_path, file_name)
file_ext = file_path.rsplit('.', maxsplit=1)
# 识别py后缀为py的文件
if file_ext[1] != 'py':
continue
All_File_Num += 1
count = 0
with open(file_path, 'rb') as f:
for line in f:
# 将代码中的空格去除,如果需要计数则保留该项
line = line.strip()
if not line:
continue
# 将代码中的注释空格去除,如果需要计数则保留该项
if line.startswith(b'#'):
continue
count += 1
All_File_Row += count
Max_Num = count if count > Max_Num else Max_Num
Min_Num = count if count < Min_Num else Min_Num
print('最大行数:', Max_Num)
print('最小行数:', Min_Num)
print('平均行数:', All_File_Row / All_File_Num)
print('文件数总和:', All_File_Num)
print('行数总和:', All_File_Row)