需求:统计指定目录下python文件的个数,代码行数,空行数,注释行数。包括子文件夹下的内容。
import os
def count_codelines(dir_path): #定义统计代码行的函数
file_num = 0 #声明变量分别存储文件个数、
all_line_num = 0 #代码总行数、
empty_line_num = 0 #空行数、
comment_line_num = 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_num += 1 #统计文件个数
with open(file_path, 'r', encoding="utf-8") as fp: #with语句读文件会自动调用close()方法,防止文件对象占用系统资源
for line in fp:
all_line_num += 1 #统计所有的行数
if line.strip() == "":
empty_line_num += 1 #统计空行数
if line[0] == "#":
comment_line_num += 1 #统计注释行数
return (file_num,all_line_num,empty_line_num,comment_line_num)
if __name__ == "__main__":
codelines = count_codelines("C:/Users/admin/PycharmProjects/pythonProject")
print("文件个数:",codelines[0],
"代码总行数:",codelines[1],
"空行数:",codelines[2],
"注释行数:",codelines[3])
os.path.join(root, file_name)
方法将目录名和文件名,拼成一个绝对路径file_path[-3:] == ".py"
用切片判断文件是否为python代码文件with open(file_path, 'r', encoding="utf-8") as fp
: with语句读文件会自动调用close()方法,防止文件对象过度占用系统资源