66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
import os
|
|
import sys
|
|
|
|
def count_lines_in_file(file_path):
|
|
"""统计单个文件的行数"""
|
|
try:
|
|
with open(file_path, 'r', encoding='utf-8') as file:
|
|
return sum(1 for _ in file)
|
|
except UnicodeDecodeError:
|
|
try:
|
|
with open(file_path, 'r', encoding='gbk') as file:
|
|
return sum(1 for _ in file)
|
|
except UnicodeDecodeError:
|
|
print(f"无法解码文件: {file_path}")
|
|
return 0
|
|
except Exception as e:
|
|
print(f"读取文件 {file_path} 时出错: {e}")
|
|
return 0
|
|
|
|
def count_lines_in_directory(directory, extensions):
|
|
"""统计目录中特定扩展名文件的总行数"""
|
|
total_lines = 0
|
|
file_count = 0
|
|
|
|
for root, dirs, files in os.walk(directory):
|
|
# 跳过__pycache__目录
|
|
if '__pycache__' in root:
|
|
continue
|
|
|
|
for file in files:
|
|
if any(file.endswith(ext) for ext in extensions):
|
|
file_path = os.path.join(root, file)
|
|
lines = count_lines_in_file(file_path)
|
|
total_lines += lines
|
|
file_count += 1
|
|
print(f"{file_path}: {lines} 行")
|
|
|
|
return total_lines, file_count
|
|
|
|
def main():
|
|
project_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
# 统计Python文件
|
|
print("=== Python文件行数统计 ===")
|
|
py_lines, py_files = count_lines_in_directory(project_dir, ['.py'])
|
|
print(f"\nPython文件总数: {py_files}")
|
|
print(f"Python文件总行数: {py_lines}")
|
|
|
|
# 统计前端文件 (HTML, CSS, JS)
|
|
print("\n=== 前端文件行数统计 ===")
|
|
frontend_extensions = ['.html', '.css', '.js']
|
|
frontend_lines, frontend_files = count_lines_in_directory(project_dir, frontend_extensions)
|
|
print(f"\n前端文件总数: {frontend_files}")
|
|
print(f"前端文件总行数: {frontend_lines}")
|
|
|
|
# 总计
|
|
total_files = py_files + frontend_files
|
|
total_lines = py_lines + frontend_lines
|
|
print("\n=== 项目总计 ===")
|
|
print(f"文件总数: {total_files}")
|
|
print(f"代码总行数: {total_lines}")
|
|
print(f"Python文件占比: {py_lines/total_lines*100:.2f}%")
|
|
print(f"前端文件占比: {frontend_lines/total_lines*100:.2f}%")
|
|
|
|
if __name__ == "__main__":
|
|
main() |