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 22 Python
Python中List.count()方法的使用教程
May 20 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
对python中的高效迭代器函数详解
Oct 18 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 Python
python实现将字符串中的数字提取出来然后求和
Apr 02 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
python代码实现猜拳小游戏
Nov 30 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
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
javascript操作数组详解
2014/12/17 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
python 不以科学计数法输出的方法
2018/07/16 Python
Python实现微信机器人的方法
2019/09/06 Python
python实现简单井字棋小游戏
2020/03/05 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
公休请假条
2014/04/11 职场文书
机械专业求职信范文
2014/07/15 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS