【代码备份】统计文件夹下所有代码文件的行数

Python脚本,帮你统计文件夹下所有代码文件的行数。这个脚本会递归遍历文件夹,支持多种编程语言的文件。

import os
from pathlib import Path

def count_lines_in_file(file_path):
    """统计单个文件的行数"""
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            return len(f.readlines())
    except UnicodeDecodeError:
        try:
            # 尝试其他编码
            with open(file_path, 'r', encoding='gbk') as f:
                return len(f.readlines())
        except:
            print(f"无法读取文件: {file_path}")
            return 0
    except Exception as e:
        print(f"处理文件时出错 {file_path}: {str(e)}")
        return 0

def count_code_lines(directory):
    """统计目录下所有代码文件的行数"""
    # 定义要统计的文件扩展名
    code_extensions = {
        '.py': 'Python',
        '.java': 'Java',
        '.cpp': 'C++',
        '.c': 'C',
        '.h': 'C/C++ Header',
        '.js': 'JavaScript',
        '.ts': 'TypeScript',
        '.html': 'HTML',
        '.css': 'CSS',
        '.go': 'Go',
        '.rs': 'Rust',
        '.php': 'PHP'
    }
    
    # 初始化结果字典
    results = {ext: {'files': 0, 'lines': 0} for ext in code_extensions.values()}
    total_files = 0
    total_lines = 0
    
    # 遍历目录
    for file_path in Path(directory).rglob('*'):
        if file_path.suffix.lower() in code_extensions:
            # 跳过隐藏文件夹(如.git)
            if '.git' in str(file_path) or 'node_modules' in str(file_path):
                continue
                
            lang = code_extensions[file_path.suffix.lower()]
            lines = count_lines_in_file(file_path)
            
            results[lang]['files'] += 1
            results[lang]['lines'] += lines
            total_files += 1
            total_lines += lines
    
    # 打印结果
    print(f"\n代码统计结果 - 目录: {directory}")
    print("-" * 50)
    print(f"{'语言':<15} {'文件数':<10} {'行数':<10}")
    print("-" * 50)
    
    for lang, data in results.items():
        if data['files'] > 0:  # 只显示有文件的语言
            print(f"{lang:<15} {data['files']:<10} {data['lines']:<10}")
    
    print("-" * 50)
    print(f"{'总计':<15} {total_files:<10} {total_lines:<10}")

# 使用示例
if __name__ == '__main__':
    directory = input("请输入要统计的目录路径: ")
    count_code_lines(directory)

这个脚本的主要特点:

  1. 支持多种常见编程语言文件的统计
  2. 递归遍历所有子目录
  3. 自动跳过 .git 和 node_modules 等特殊目录
  4. 支持 UTF-8 和 GBK 编码的文件
  5. 按语言类型分类统计
  6. 显示每种语言的文件数和总行数
  7. 最后显示总计数据

使用方法很简单,直接运行脚本并输入要统计的目录路径即可。比如:

请输入要统计的目录路径: /path/to/your/project

代码统计结果 - 目录: /path/to/your/project
--------------------------------------------------
语言             文件数      行数      
--------------------------------------------------
Python          5          1250      
JavaScript      3          860       
CSS             2          320       
--------------------------------------------------
总计             10         2430      

如果你需要添加其他类型的文件扩展名,只需要在 code_extensions 字典中添加即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jcfszxc

赏我点铜板买喵粮吃吧!

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

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

打赏作者

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

抵扣说明:

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

余额充值