目录

  • 一 使用PYTHON统计项目代码行数
  • 二 应用实例


注:原创不易,转载请务必注明原作者和出处,感谢支持!

一 使用PYTHON统计项目代码行数

遇到一个非常小的需求:统计一个项目里头的各类源代码共有多少行。像这种小需求,一个简单的shell脚本就能够完成的。但是我不会shell ヾ(。 ̄□ ̄)ツ゜゜゜。于是求助python,经过一段时间后,写了一个简单的Python脚本如下。

# code_analyst.py#!/usr/bin/env python3
# -*- coding: utf-8 -*-import os
import sys
import prettytable as pt# 后缀集合
CPP_SUFFIX_SET = {'.h', '.hpp', '.hxx', '.c', '.cpp', '.cc', '.cxx'}
PYTHON_SUFFIX_SET = {'.py'}
JAVA_SUFFIX_SET = {'.java'}# 全局变量
cpp_lines = 0
python_lines = 0
java_lines = 0
total_lines = 0def list_files(path):'''遍历工程路径path,如果遇到文件则统计其行数,如果遇到目录则进行递归'''filenames = os.listdir(path)for f in filenames:fpath = os.path.join(path, f)if (os.path.isfile(fpath)):count_lines(fpath)if (os.path.isdir(fpath)):list_files(fpath)def count_lines(fpath):'''对于文件fpath,计算它的行数,然后根据其后缀将它的行数加到相应的全局变量当中'''global CPP_SUFFIX_SET, PYTHON_SUFFIX_SET, JAVA_SUFFIX_SETglobal cpp_lines, python_lines, java_lines, total_lines# 统计行数with open(fpath, 'rb') as f:cnt = 0last_data = '\n'while True:data = f.read(0x400000)if not data:breakcnt += data.count(b'\n')last_data = dataif last_data[-1:] != b'\n':cnt += 1# 只统计C/C++,Python和Java这三类代码suffix = os.path.splitext(fpath)[-1]if suffix in CPP_SUFFIX_SET:cpp_lines += cntelif suffix in PYTHON_SUFFIX_SET:python_lines += cntelif suffix in JAVA_SUFFIX_SET:java_lines += cntelse:passdef print_result():'''本函数依赖库prettytable,请使用sudo pip3 install prettytable进行安装'''tb = pt.PrettyTable()tb.field_names = ['CPP', 'PYTHON', 'JAVA', 'TOTAL']tb.add_row([cpp_lines, python_lines, java_lines, total_lines])print(tb)if __name__ == '__main__':if (len(sys.argv) != 2):print("Usage : python3 code_analyst.py project_path")else:project_path = sys.argv[1]list_files(project_path)total_lines = cpp_lines + python_lines + java_linesprint_result()

简单解释一下代码。首先在命令行运行该脚本并将项目目录的路径作为命令行参数传入。比如,在当前目录下面有一个目录src,你可以使用以下命令对该项目的代码行数进行统计。

python3 code_analyst.py `pwd`/src

然后,将项目路径project_path传入list_files()当中,list_files()负责递归地搜索目录下的每一个子文件或者子文件夹。如果找到的是文件,则将文件名fpath传给count_lines()当中。count_lines()只统计文件后缀名在预定义的文件后缀集合当中的文件的行数。在统计完成之后,调用print_result()把结果打印出来。

注意:print_result()依赖软件包prettytable,请使用下面的命令进行安装。

sudo pip3 install prettytable

二 应用实例

src目录的统计结果。

lzh@lzh-VBox:~$ python3 code_analyst.py ./Temp/src/
+-----+--------+------+-------+
| CPP | PYTHON | JAVA | TOTAL |
+-----+--------+------+-------+
|  21 |   0    |  0   |   21  |
+-----+--------+------+-------+
lzh@lzh-VBox:~$

开源SLAM系统VINS-Mono的统计结果。

lzh@lzh-VBox:~$ python3 code_analyst.py ./VINS-Mono/
+-------+--------+------+-------+
|  CPP  | PYTHON | JAVA | TOTAL |
+-------+--------+------+-------+
| 27695 |   0    |  0   | 27695 |
+-------+--------+------+-------+
lzh@lzh-VBox:~$

高翔博士《视觉SLAM十四讲》配套代码库的统计结果。

lzh@lzh-VBox:~$ python3 code_analyst.py ./slambook-master/
+-------+--------+------+-------+
|  CPP  | PYTHON | JAVA | TOTAL |
+-------+--------+------+-------+
| 14240 |  127   |  0   | 14367 |
+-------+--------+------+-------+
lzh@lzh-VBox:~$

上述代码只是一段玩具代码,非常脆弱,只能达到基本能用的程度。你输入个错误的项目路径,程序分分钟奔溃。

转载于:https://www.cnblogs.com/laizhenghong2012/p/11348004.html

使用PYTHON统计项目代码行数相关推荐

  1. IntelliJ IDEA统计项目代码行数

    第一步首先需要知道idea统计项目代码行数,主要是使用Statistic插件来统计,点击File->Settings,如下图所示: 第二步进去Settings界面之后,点击Plugins,然后点 ...

  2. Python脚本可以统计项目代码行数

    将下列代码保存至py文件,然后命令行方式在console执行即可. 配置说明: ROOT_PATH配置source目录,会自动递归统计所有文件代码行数总和. INCLUDE_EMPTY_LINE:Tr ...

  3. python项目代码量_python统计项目代码行数

    stat.py #!/usr/bin/env python3 # -*- coding: utf-8 -*- import chardet import os import sys # 定义注释的格式 ...

  4. Intellij idea利用Statistic插件统计项目代码行数

    1 . 插件介绍 统计项目中各个文件的数量,大小,行数,平均等信息 根据扩展名自定义统计详细行数信息 , 包括总行数,代码行数,代码行数占比,注释行数,注释行数占比,空白行数,空白行数占比 自定义选择 ...

  5. 统计java代码行数_统计项目代码行数

    今天测试告知需要项目的代码行数,项目怎么也有十万左右的代码行数,想想就想奔溃了, Eclipse一定有这方面的统计,应该也有统计工具,于是上网查了一番,果然找到了. 1.我要查询的文件类型为*.xml ...

  6. 统计项目代码行数 intelliJ idea statistic 插件

    任务需求是让你统计一下,现在涉及到的每个模块的代码的行数,这个任务怎么实现呢?哎,这idea竟然有个现成的插件,直接拿来用,就能实现对源码的简单分析和统计.直接在idea的插件仓库里面搜索" ...

  7. 发一个统计项目代码行数的Java代码

    import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Arra ...

  8. Linux统计项目代码行数

    首先进入项目工程下 统计项目下所有文件行数 find . -type f |xargs cat|wc -l 统计项目下 .c 文件行数 find . -name "*.c" |xa ...

  9. git统计当前项目代码行数

    git统计当前项目代码行数 在项目根目录输入以下代码 git log --format='%aN' | sort -u | while read name; do echo -en "$na ...

最新文章

  1. 全球及中国润滑油市场产销规模及营销竞争分析报告2021-2027年
  2. Java设计模式 之 工厂方法模式
  3. VTK:BackgroundImage背景图用法实战
  4. json及JavaBean转json
  5. c语言数组两个值交换,如可交换两个数组中的元素?
  6. 用 dash_bootstrap_components 为 dash 生成美观的导航栏
  7. 容器镜像相关项目 错误 分析步骤
  8. Python Window10 环境安装流程
  9. html5 加上魔法,简单易懂的React魔法(28):是时候添加一些CSS样式了
  10. 清华计算机系超算团队,清华大学学生超算团队
  11. MYSQL 常用命令大全整理
  12. dubboX提供rest服务
  13. PAT 7-14 电话聊天狂人
  14. 深入了解Unity剔除(草稿)
  15. 哪位有没有reportbuilder的教程?共享一下。万分感谢!
  16. MySQL数据库如何改名
  17. android使图片变为圆形
  18. 不同分发平台的区别和特点
  19. C#读取写入excel单元格
  20. Flutter集成个推推送-安卓原生篇

热门文章

  1. java await signal_java Condtion await方法和signal方法解析
  2. 并发测试mysql_实践100个线程:一次MySQL数据并发问题
  3. mybatis 忽略实体字段_27道mybatis面试真题,你能答对几道?
  4. win10虚拟机怎么连接服务器,Win10系统虚拟机尝试连接到服务器出错怎么办
  5. GSON序列化时,日期格式问题处理
  6. nginx http proxy 反向代理
  7. Java的org.apache.commons.lang3.StringUtils
  8. php中怎样阻止网页进行跳转,php中如何阻止网页进行跳转?
  9. php mssql 新 id,MSSQL获取当前插入数据的id
  10. tomcat源码分析_百战卓越108天tomcat和servlet源码分析