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实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
python实现发送邮件及附件功能
Mar 02 Python
python操作oracle的完整教程分享
Jan 30 Python
python设置值及NaN值处理方法
Jul 03 Python
python时间序列按频率生成日期的方法
May 14 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
Python实现字符串中某个字母的替代功能
Oct 21 Python
python KNN算法实现鸢尾花数据集分类
Oct 24 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
Mar 10 Python
pycharm实现在子类中添加一个父类没有的属性
Mar 12 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 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
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
CI框架Session.php源码分析
2014/11/03 PHP
PHP7多线程搭建教程
2017/04/21 PHP
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
python中List的sort方法指南
2014/09/01 Python
Python中按键来获取指定的值
2019/03/02 Python
详解python的argpare和click模块小结
2019/03/31 Python
django celery redis使用具体实践
2019/04/08 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
简历的个人自我评价范文
2014/01/03 职场文书
项目计划书范文
2014/01/09 职场文书
初中音乐教学反思
2014/01/12 职场文书
开工庆典邀请函范文
2014/01/16 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
反邪教观后感
2015/06/11 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
Mysql数据库命令大全
2021/05/26 MySQL
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python