Python实现统计代码行数功能

此程序可统计任意开发语言代码行数,废话不多说,直接上代码

# coding:utf-8
"""
此程序用于统计代码行数,可返回文件代码行、空白行、注释行的数量
"""
import os


def count_line_num(flie_path, single_line_annotation='#', multi_line_annotation_start=('"""', "'''"),
                   multi_line_annotation_end=('"""', "'''",)):
    """
    统计单个文件代码行数
    :param flie: 代码文件地址
    :param single_line_annotation: 单行注释标识,如python代码'#'
    :param multi_line_annotation_start: 多行注释开始标识,如python代码 '''
    :param multi_line_annotation_end: 多行注释结束标识,如python代码 '''
    :return: 代码行数,空行行数,注释行数
    """
    code_num = 0  # 代码行数
    blank_num = 0  # 空行行数
    annotation_num = 0  # 注释行数
    with open(flie_path, encoding='utf8') as f:
        flag = False  # 多行注释表示位, True表示多行注释  False表示代码
        for i in f.readlines():
            i = i.strip().strip('\n')
            if not i:  # 判断是否为空行
                # print('空行' + i)
                blank_num += 1
                continue
            else:
                if i.startswith(single_line_annotation):  # 单行注释
                    annotation_num += 1
                    # print('注释 ' + i)
                    continue
                if i.startswith(multi_line_annotation_start) and i.endswith(multi_line_annotation_end):  # 多行注释标识注释单行
                    annotation_num += 1
                    # print('注释 ' + i)
                    continue
                if not flag and i.startswith(multi_line_annotation_start):  # 多行注释开始
                    flag = True
                    annotation_num += 1
                    # print('注释 ' + i)
                    continue
                if flag:  # 多行注释
                    # print('注释 ' + i)
                    annotation_num += 1
                    if i.endswith(multi_line_annotation_end):  # 多行注释结束
                        flag = False
                    continue
                # print('代码' + i)
                code_num += 1
    return code_num, blank_num, annotation_num


if __name__ == '__main__':
    file_list = []  # 定义文件列表
    file_dir = 'D:\\代碼統計'  # 目录地址
    for root, dirs, files in os.walk(file_dir):  # 读取目录下的所有文件
        t = [os.path.join(root, i) for i in files]
        file_list += t
    total_code_num = 0
    total_blank_num = 0
    total_annotation_num = 0
    for i in file_list:
        code_num, blank_num, annotation_num = 0, 0, 0
        if i.endswith('.py'):  # python文件
            code_num, blank_num, annotation_num = count_line_num(i)
            # 打印单个文件代码数量
            print(i)
            print('code num: ', code_num)
            print('blank num: ', blank_num)
            print('annotation num: ', annotation_num)
        if i.endswith('.html'):  # html文件
            code_num, blank_num, annotation_num = count_line_num(i, single_line_annotation='//',
                                                                 multi_line_annotation_start=('/*', '<!--', '{#'),
                                                                 multi_line_annotation_end=('*/', '-->', '#}'))
            # 打印单个文件代码数量
            print(i)
            print('code num: ', code_num)
            print('blank num: ', blank_num)
            print('annotation num: ', annotation_num)
        total_code_num += code_num
        total_blank_num += blank_num
        total_annotation_num += annotation_num
    # 打印统计数量
    print('-----total--------')
    print('total code num: ', total_code_num)
    print('total blank num: ', total_blank_num)
    print('total annotation num: ', total_annotation_num)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuerba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值