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中使用ConfigParser解析ini配置文件实例
Aug 30 Python
Python基于有道实现英汉字典功能
Jul 25 Python
python编写分类决策树的代码
Dec 21 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
python实现定时发送qq消息
Jan 18 Python
python实现银行管理系统
Oct 25 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
python实现画循环圆
Nov 23 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
win10+anaconda安装yolov5的方法及问题解决方案
Apr 29 Python
Python list列表删除元素的4种方法
Nov 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编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
跟老齐学Python之print详解
2014/09/28 Python
Python中 map()函数的用法详解
2018/07/10 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
环境保护标语
2014/06/20 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
未婚证明书模板
2014/10/08 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
给学校的建议书400字
2015/09/14 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python