2020-12-8 更新,新增忽视注释行、空行、单字符行的功能
代码
"""
递归统计某个目录下给定类型的代码文件总行数
但实际使用中由于只能通过后缀区分,总会有一些问题造成误差(库、二进制文件等)
支持忽视注释、空行、单字符行
将所有包含要计算后缀的文件扔进同一个文件夹然后运行该文件,注意去掉库文件
"""
import os
from rmComment import parse_file
def calc_file(file_path):
"""统计单文件的行数"""
file_str = parse_file(file_path, output='string')
count = 0
for line in file_str.split('
'):
# 有效避免各种编码问题
count += len(line.strip()) > 1
# 不计算空行、单字符行
return count
def calc_folder(path, types=('py', )):
""""统计文件夹中特定类型文件各自的总行数"""
count_dict = dict.fromkeys(types, 0)
for dirpath, _, filenames in os.walk(path):
for name in filenames:
ext = name.rsplit('.')[-1]
if ext not in types:
continue
filepath = os.path.join(dirpath, name)
count_dict[ext] += calc_file(filepath)
return count_dict
if __name__ == '__main__':
folder = r'H:folder'
file_types = ('wxml', 'vue', 'py', 'cpp', 'wxss', 'css', 'c', 'js', 'html', 'less', )
total = 0
for ext, cnt in calc_folder(folder, file_types).items():
total += cnt
print(f'{ext}文件总行数:{cnt}')
print(f'{folder}文件夹内代码总行数:{total}')
input()
使用
- 修改入口的folder及file_types变量运行即可
- 其中rmComment用于去除代码注释:rmComment.py
输出示例
js文件总行数:1601
vue文件总行数:451
html文件总行数:0
wxml文件总行数:707
css文件总行数:0
wxss文件总行数:1186
less文件总行数:1128
py文件总行数:87
D:doneCode文件夹内代码总行数:5160