对目录下所有的代码文件的行数进行计数
给出工程路径、指定代码类型,计算总共有多少行代码。
以下代码的原理是,递归搜索文件夹下的源码文件,然后统计该文件有多少行,然后累加。
# -*- coding: utf-8 -*- # @Author : ZhaoKe # @Time : 2021-10-08 18:08 import os sum_line_count = 0 def count_file_line(path): # print("当前文件:", path) count = 1 with open(path, 'r', encoding="utf_8_sig") as f: line = f.readline() while line: line = f.readline() count += 1 return count def count_dir_files_code_lines(path, category): global sum_line_count if os.path.isdir(path): for sub_dir in os.listdir(path): count_dir_files_code_lines(os.path.join(path, sub_dir), category) elif path[-len(category):] == category: # elif path[-2:] == "cs": sum_line_count += count_file_line(path) # print("当前计数:", sum_line_count) return sum_line_count if __name__ == '__main__': line_count = count_dir_files_code_lines("E:/ExecuSimu/ExecuDS10/Assets/Scripts", 'cs') print(line_count)
以上代码以C#文件为例,文件后缀为"cs",能够给出正确结果。
不过上面这个代码写的并不好,首先既然已经声明全局变量了,把全局变量作为函数返回值,属实过于冗余,而且可以直接把每一行直接加到全局变量上,另外,其实 len(f.readlines()) 就是某文件的行数!
另外,如此做,也把空白行统计进去了,不够严谨。
# -*- coding: utf-8 -*- # @Author : ZhaoKe # @Time : 2021-10-08 18:08 import os sum_line_count = 0 sum_line_count_without_blank = 0 def count_file_line(path): global sum_line_count global sum_line_count_without_blank with open(path, 'r', encoding="utf_8_sig") as f: # ------------ # print(path) # print("line count: ", len(f.readlines())) # count += len(f.readlines()) # ------------ line = f.readline() while line: line = f.readline() if line is not "": sum_line_count_without_blank += 1 sum_line_count += 1 def count_dir_files_code_lines(path, category): if os.path.isdir(path): for sub_dir in os.listdir(path): count_dir_files_code_lines(os.path.join(path, sub_dir), category) elif path[-len(category):] == category: count_file_line(path) if __name__ == '__main__': directory_path = "D:/javaworkspace/designPatterns/src" print("target path", directory_path) count_dir_files_code_lines(directory_path, 'java') print("sum of line count: ", sum_line_count) print("sum of line count without blank line: ", sum_line_count_without_blank)
如此就优化了,同时统计文件行数和非空白的行数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)