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的Tornado框架实现数据可视化的教程
May 02 Python
python实现逆序输出一个数字的示例讲解
Jun 25 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
python3下载抖音视频的完整代码
Jun 05 Python
python实现五子棋小程序
Jun 18 Python
python 随机森林算法及其优化详解
Jul 11 Python
使用python实现画AR模型时序图
Nov 20 Python
python数据分析:关键字提取方式
Feb 24 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
python matplotlib包图像配色方案分享
Mar 14 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 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不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
简单上手Python中装饰器的使用
2015/07/12 Python
Python作用域用法实例详解
2016/03/15 Python
python 正确保留多位小数的实例
2018/07/16 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
微信公众号token验证失败解决方案
2019/07/22 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
应届大学生自荐信
2013/12/05 职场文书
高一化学教学反思
2014/02/05 职场文书
妇联主席先进事迹
2014/05/18 职场文书
文艺晚会策划方案
2014/06/11 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
深入浅析React中diff算法
2021/05/19 Javascript
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python