2022年 11月 3日

Python统计文件行数

问:统计项目下文件的总行数?


解:
        第一步:先用python统计单个文件行数;
        第二步:遍历文件夹累加全部文件行数;

当然,pycharm有插件直接可以统计行数:Statistic – IntelliJ IDEs Plugin | Marketplace

具体实现步骤:获取单个文件行数:

  1. # -*- coding: utf-8 -*-
  2. file = r"文件路径"
  3. # 第一种,直接打开文件读取行数(文件较小时)
  4. count = 1
  5. for count, line in enumerate(open(file, 'r', encoding='utf-8').readlines()):
  6. count += 1
  7. print('行数:', count)
  8. # 第二种,读取文件到缓存中,根据换行符进行计算
  9. count = 1
  10. fp = open(file, "r", encoding='utf-8')
  11. while 1:
  12. buffer = fp.read(8*1024*1024)
  13. if not buffer:
  14. break
  15. count += buffer.count('\n')
  16. print("行数:", count)

遍历文件夹进行读取:这里需要引入os模块,对文件夹进行遍历

  1. import os
  2. total_line_num = 0 # 总行数
  3. total_file_num = 0 # 总文件数
  4. avg_file_num = 0 # 平均行数
  5. max_line_num = 0 # 最大行数
  6. min_line_num = 999999 # 最小行数
  7. for base_path, folder_list, file_list in os.walk('C:/Users/xxx/xxx/xxx'):
  8. total_file_num += len(file_list)
  9. # 遍历文件列表
  10. for file_name in file_list:
  11. # 文件路径
  12. file_path = os.path.join(base_path, file_name)
  13. # 获取文件后缀,根据需要根据后缀进行文件排除
  14. file_ext = file_path.rsplit('.', maxsplit=1)
  15. # 不是py文件,排除
  16. if file_ext[1] != 'py':
  17. continue
  18. # py文件数加一
  19. total_file_num += 1
  20. count = 0
  21. with open(file_path, 'rb') as f:
  22. for line in f:
  23. # 根据需要是否去除空格
  24. line = line.strip()
  25. if not line:
  26. continue
  27. # 根据需要是否去除注释
  28. if line.startswith(b'#'):
  29. continue
  30. count += 1
  31. total_line_num += count
  32. max_line_num = count if count > max_line_num else max_line_num
  33. min_line_num = count if count < min_line_num else min_line_num
  34. print('总行数:', total_line_num)
  35. print('总文件数:', total_file_num)
  36. print('最多行数:', max_line_num)
  37. print('最小总行数:', min_line_num)
  38. print('平均行数:', total_line_num / total_file_num)