[python] 简易代码量统计脚本

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('\n'):
        # 有效避免各种编码问题
        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

posted @ 2020-09-06 20:41  NoNoe  阅读(303)  评论(1编辑  收藏  举报