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使用pil生成图片验证码的方法
May 08 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
关于python pyqt5安装失败问题的解决方法
Aug 08 Python
python数据结构之列表和元组的详解
Sep 23 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
Python简单定义与使用二叉树示例
May 11 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
原生python实现knn分类算法
Oct 24 Python
利用Python脚本实现自动刷网课
Feb 03 Python
python安装读取grib库总结(推荐)
Jun 24 Python
简述 Python 的类和对象
Aug 21 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
javascript 闭包详解
2015/02/15 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
python中反射用法实例
2015/03/27 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
python添加菜单图文讲解
2019/06/04 Python
Python常用库大全及简要说明
2020/01/17 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
Python递归函数特点及原理解析
2020/03/04 Python
Python 如何批量更新已安装的库
2020/05/26 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
什么是事务?事务有哪些性质?
2012/03/11 面试题
MIS软件工程师的面试题
2016/04/22 面试题
在求职信中如何凸显个人优势
2013/10/30 职场文书
留学推荐信怎么写
2014/01/25 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
长城英文导游词
2015/01/30 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书