使用python对文件夹里面所有代码行数进行统计。

统计目录下所有的代码个数和总行数。

# -*- coding: utf-8 -*-
# @Author  : ydf
import json
import os
from pathlib import Path
from collections import OrderedDict
from app.utils_ydf import LoggerMixin


class CodeStatistics(LoggerMixin):
    def __init__(self, root_dir: str = None, file_suffix_tuple=('.py',)):
        self.root_dir = root_dir or Path(__file__).parent.parent
        self._file_suffix_tuple = file_suffix_tuple
        self.file_name__file_line_map = dict()
        self._total_lines = 0

    def _find_all_files(self):
        """
        查到所有符合条件的文件
        :return:
        """
        for parent, dirnames, filenames in os.walk(self.root_dir):
            for filename in filenames:
                ext = filename.split('.')[-1]
                if '.' + ext in self._file_suffix_tuple:
                    self.file_name__file_line_map[os.path.join(parent, filename)] = 0

    def _conunt_file_line(self, file_name):
        """
        计算一个文件的代码行数
        :param file_name:
        :return:
        """
        for file_line in open(file_name, encoding='utf8').readlines():
            if file_line != '' and file_line != '\n':  # 过滤掉空行
                self.file_name__file_line_map[file_name] += 1
                self._total_lines += 1

    def start_statistics(self):
        self._find_all_files()
        for file_name in self.file_name__file_line_map:
            self._conunt_file_line(file_name)
        self.logger.debug(json.dumps(self.file_name__file_line_map, indent=4))
        ordered_dict = OrderedDict()
        for k, v in sorted(self.file_name__file_line_map.items(), key=lambda itemx: itemx[1], reverse=True):
            ordered_dict[k] = v
        self.logger.info(json.dumps(ordered_dict, indent=4))
        self.logger.info(f'文件夹{self.root_dir} 里面一共有 {len(self.file_name__file_line_map)} 个以 {self._file_suffix_tuple} 为后缀的代码文件,总行数是 {self._total_lines}')
        return len(self.file_name__file_line_map), self._total_lines


if __name__ == '__main__':
    CodeStatistics().start_statistics()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值