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

# -*- 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()

使用python对文件夹里面所有代码行数进行统计。的更多相关文章

  1. 统计文件夹下java代码行数的小程序--主要是学习任务队列的思想

    首先感谢czbk的老师,录制的视频,让我们有这么好的学习资料.……—— 统计文件夹java文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...

  2. Python将文件夹下的文件名写入excel方便统计

    如题,贴代码: 1 ''' 2 #python将某文件夹下的文件名存储到excel中 3 ''' 4 5 #导入所需模块 6 import os 7 import xlwt 8 9 #定义要处理的文件 ...

  3. linux下查看目录下某种文件类型累计的代码行数

    find 路径 -name '*.py' | xargs wc -l

  4. [转] 一句shell命令搞定代码行数统计

    今天面试时,突然被面试官问到怎样用shell命令搞定某个文件夹下java代码行数的统计. 想了一下,基本思路就是找到这个文件夹下面的所有java文件,然后每个文件统计一下代码,外层套个for循环,叠加 ...

  5. OC获取文件(夹)的代码行数

    /* 考察NSString NSArray NSFileManager */ #import <Foundation/Foundation.h> /* 计算单个文件的代码行数 path:文 ...

  6. python 脚本(获取指定文件夹、指定文件格式、的代码行数、注释行数)

    1.代码的运行结果: 获取 指定文件夹下.指定文件格式 文件的: 总代码行数.总注释行数(需指定注释格式).总空行数: #coding: utf-8 import os, re # 代码所在目录 FI ...

  7. 使用PYTHON统计项目代码行数

    目录 一 使用PYTHON统计项目代码行数 二 应用实例 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 使用PYTHON统计项目代码行数 遇到一个非常小的需求:统计一个项目里头的各类源代码 ...

  8. ubuntu输入某个目录测试该目录里.C文件里代码行数shell脚本

    #!/bin/bash echo "★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★" echo "★☆       统计代码行数        ☆★&qu ...

  9. python 关于文件夹的操作

    在python中,文件夹的操作主要是利用os模块来实现的, 其中关于文件夹的方法为:os.lister() , os.path.join() , os.path.isdir() #  path 表示文 ...

随机推荐

  1. CentOS 7 巨大变动之 systemd 取代 SysV的Init

    1 systemd是什么 首先systmed是一个用户空间的程序,属于应用程序,不属于Linux内核范畴,Linux内核的主要特征在所有发行版中是统一的,厂商可以自由改变的是用户空间的应用程序.   ...

  2. ARDUINO使用GPRS发送GPS数据到OneNet测试

    功能: 测试把固定的GPS数据发送到OneNet平台 调试途中碰到的问题 ARDUINO不支持sprintf的double打印,只能转换为char字符串然后再%s打印 #include <Tim ...

  3. python 批量修改预定字符串并将修改后的字符串插入文件指定位置

    下面的例子是在文件的指定位置增加指定字符串的例子 修改配置文件: def add_str(pre_str): lines = [] flag = True f = open("z.txt&q ...

  4. P4455 [CQOI2018]社交网络(矩阵树定理)

    题目 P4455 [CQOI2018]社交网络 \(CQOI\)的题都这么裸的吗?? 做法 有向图,指向叶子方向 \(D^{out}(G)-A(G)\) 至于证明嘛,反正也就四个定理,先挖个坑,省选后 ...

  5. 纯CSS3垂直动画菜单

    在线演示 本地下载

  6. Java的TCP网络编程

    服务端代码: package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...

  7. 重拾安卓_01_安卓开发环境搭建(eclipse)

    一.下载安装Android SDK 1.下载地址 (1)官网(可FQ选择):http://developer.android.com/sdk/index.html (2)不可FQ选择:http://w ...

  8. BEC listen and translation exercise 31

    听力练习: All societies have ways of encouraging and enforcing what they view as appropriate behaviour w ...

  9. ATL com的dll文件与tlb文件

    一..tlb文件: 只有COM组件才有tlb文件,普通dll文件没有. 包含内容: 1.它包含了COM类和接口的GUID值,接口的函数声明信息,并不是接口的实现文件.相当于类和接口的头文件. tlb文 ...

  10. stl_vector.h

    stl_vector.h // Filename: stl_vector.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http ...