Python统计项目代码的行数

功能

统计Python、Java、C++等语言的项目内代码文件行数并输出。
使用前需安装prettytable用于美化输出
pip install prettytable

代码
# coding=utf-8
import os
import sys
import prettytable as pt
import codecs

# 指定想要统计的文件类型
CPP_SUFFIX_SET = {'h', 'hpp', 'hxx', 'c', 'cpp', 'cc', 'cxx'}
PYTHON_SUFFIX_SET = {'py'}
JAVA_SUFFIX_SET = {'java'}

def list_files(project_path):
    # 遍历文件, 递归遍历文件夹中的所有
    filelists = []
    for parent, dirnames, filenames in os.walk(project_path):
        for filename in filenames:
            filelists.append(os.path.join(parent, filename))
    return filelists

def count_line(filename):
    # 统计一个文件的行数
    count = 0
    with codecs.open(filename, 'r', 'utf-8') as f:
        for line in f.readlines():
            line = line.strip()  # 删除行首的空格
            if line != '' and line != '\n':   # 过滤掉空行
                if line[0] != '#' and line[0] != '/':  # 过滤掉注释行
                    count += 1
    return count

def statistics(filelist):
    cpp_lines = 0
    python_lines = 0
    java_lines = 0
    for filename in filelist:
        ext = filename.split('.')[-1]
        if ext in CPP_SUFFIX_SET:
            cpp_lines += count_line(filename)
        elif ext in PYTHON_SUFFIX_SET:
            print(filename)
            python_lines += count_line(filename)
        elif ext in JAVA_SUFFIX_SET:
            java_lines += count_line(filename)
    total_lines = cpp_lines + python_lines + java_lines
    return cpp_lines, python_lines, java_lines, total_lines

def print_result(cpp_lines, python_lines, java_lines, total_lines):
    tb = pt.PrettyTable()
    tb.field_names = ['CPP', 'PYTHON', 'JAVA', 'TOTAL']
    tb.add_row([cpp_lines, python_lines, java_lines, total_lines])
    print(tb)


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print("请指定项目路径!")
    else:
        project_path = sys.argv[1]
        filelists = list_files(project_path)
        print_result(*statistics(filelists))

运行:python statistics.py D:\work\project
输出结果如下:
在这里插入图片描述

参考资料:
[1] Python 统计代码的行数,Python脚本 统计代码
[2] 使用PYTHON统计项目代码行数

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值