python实现统计代码行数的小工具


Posted in Python onSeptember 19, 2019

一个用python实现的统计代码行数的小工具,供大家参考,具体内容如下

实现功能

  • 计算出某一目录以及子目录下代码文件的行数
  • 在计算代码的过程中,只对标准命名的文件进行统计,如[文件名.文件类型]
  • 排除了以“#”开头的包含文件,宏定义等,如#include, #define, #pragma等
  • 排除了c,cpp文件中的“//”, “/…/”等的注释
  • 排除了python文件中import, from 等开头的导入

使用方法

新建countLines.py文件,复制代码到文件中,将其放在想计算行数的代码目录下,直接使用Python运行即可算出该目录以及所有子目录下代码文件的行数。

1.将该python文件命名为countLines.py,放到想计算代码行数的文件目录下

python实现统计代码行数的小工具

2.其中helloworld.c文件内容如下:

python实现统计代码行数的小工具

3.用python.exe直接打开该文件或者使用python countLines.py,运行文件即可。 

python实现统计代码行数的小工具

我们可以看到,统计代码行的时候我们排除了两个空行以及开头的包含文件行,因此有效代码行为5行

代码实现

#!/usr/bin/env python
# -- coding: utf-8 --
# @Time : 2018/3/5 13:55
# @Author : likewind
# @mail : likewind1993@163.com
# @File : countLines.py
# @Software: sky-studio.cn
import os
'''
返回每个文件行数,其中行数不包括以“#”开头的包含文件,宏定义等,
排除了c,cpp文件中的“//”, “/*...*/”等的注释,
排除了python文件中import, from 等开头的导入
'''

def get_lines(file_name):
 f = open(file_name)
 #flag用于处理c,cpp中“/*...*/”多行注释
 flag = False
 count = 0
 while True:
 #读取文件并去除开头的空格,制表符
 line = f.readline()
 line = line.lstrip(' \t')
 if not line:
  break
 #如果该行有“#”, “import”等打头的字符,忽略该行
 if flag == False:
  if line[0:1] == "#" or line[0:6] == "import" or line[0:4] == "from" or line == "\n" or line[0:2] == "//":
  continue
 #如果该行存在“/*”并且不存在“*/”,表明多行注释未在一行结束,flag=True
 if line.find("/*") != -1 :
  if line.find("*/") != -1:
  continue
  else:
  flag = True
  continue
 #如果flag=True,表明处于多行注释中,判断是否有“*/”结尾
 if flag == True :
  if line.find("*/") != -1:
  flag = False
  if line[-2:] != "*/":
   count = count+1
  continue
 #排除以上条件后,行数增加一
 count = count+1
 f.close()
 return count
'''
计算该文件目录下所有符合条件的行数
'''
def count_lines(file_dir):
 #total_lines表示总行数,file_nums表示总文件数
 total_lines = 0
 file_nums = 0
 for root, dirs, files in os.walk(file_dir):
 for file in files:
  #不计算本文件的行数
  if file == "countLines.py":
  continue
  #只计算规范命名文件, 如[文件名.文件类型]
  file_type = file.split('.')
  if len(file_type) > 1 :
  #如果想计算其他类型的文件,可以在这里进行修改
  if file_type[1] not in ["py", "c", "cc", "cpp", "h"]:
   continue
  else:
  continue
  file_name = root +"\\" + file
  lines = get_lines(file_name)
  total_lines = total_lines + lines
  print file_name + " contains lines : " + repr(lines)
  file_nums = file_nums + 1
 #输出结果
 print "------------------------------------"
 print "Total Files : " + repr(file_nums)
 print "Total lines : " + repr(total_lines)
 print "------------------------------------"

if __name__ == '__main__':
 cur_path = os.path.split(os.path.realpath(__file__))[0]
 count_lines(cur_path)
 raw_input("Press any key to exit...")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例详解Python中循环语句的嵌套使用
May 14 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
python Tkinter的图片刷新实例
Jun 14 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
关于tensorflow的几种参数初始化方法小结
Jan 04 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
python自动生成sql语句的脚本
Feb 24 Python
Python实现DBSCAN聚类算法并样例测试
Jun 22 Python
Python合并pdf文件的工具
Jul 01 Python
python日志模块logbook使用方法
Sep 19 #Python
python统计指定目录内文件的代码行数
Sep 19 #Python
python如何从文件读取数据及解析
Sep 19 #Python
python实现代码统计器
Sep 19 #Python
python实现代码统计程序
Sep 19 #Python
python tkinter图形界面代码统计工具(更新)
Sep 18 #Python
python3获取url文件大小示例代码
Sep 18 #Python
You might like
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
网上抓的一个特效
2007/05/11 Javascript
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
取选中的radio的值
2010/01/11 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
简单的Vue SSR的示例代码
2018/01/12 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
在Python中执行系统命令的方法示例详解
2017/09/14 Python
Python yield与实现方法代码分析
2018/02/06 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
Python 存取npy格式数据实例
2020/07/01 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
新课培训心得体会
2014/09/03 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
导游词之包公祠
2019/11/25 职场文书