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 相关文章推荐
web.py中调用文件夹内模板的方法
Aug 26 Python
python使用nntp读取新闻组内容的方法
May 08 Python
在Django框架中伪造捕捉到的URLconf值的方法
Jul 18 Python
python实现机器学习之多元线性回归
Sep 06 Python
python 构造三维全零数组的方法
Nov 12 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 Python
python如何实时获取tcpdump输出
Sep 16 Python
Python __slots__的使用方法
Nov 15 Python
python基于爬虫+django,打造个性化API接口
Jan 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
如何去掉文章里的 html 语法
2006/10/09 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
jQuery textarea的长度进行验证
2009/05/06 Javascript
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
怎么使用pipenv管理你的python项目
2018/03/12 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
公司外出活动方案
2014/08/14 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python