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)
这个脚本的主要特点:
- 支持多种常见编程语言文件的统计
- 递归遍历所有子目录
- 自动跳过 .git 和 node_modules 等特殊目录
- 支持 UTF-8 和 GBK 编码的文件
- 按语言类型分类统计
- 显示每种语言的文件数和总行数
- 最后显示总计数据
使用方法很简单,直接运行脚本并输入要统计的目录路径即可。比如:
请输入要统计的目录路径: /path/to/your/project
代码统计结果 - 目录: /path/to/your/project
--------------------------------------------------
语言 文件数 行数
--------------------------------------------------
Python 5 1250
JavaScript 3 860
CSS 2 320
--------------------------------------------------
总计 10 2430
如果你需要添加其他类型的文件扩展名,只需要在 code_extensions
字典中添加即可。