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 相关文章推荐
Django框架中render_to_response()函数的使用方法
Jul 16 Python
Django接受前端数据的几种方法总结
Nov 04 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
利用python库在局域网内传输文件的方法
Jun 04 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
python一些性能分析的技巧
Aug 30 Python
python利用tkinter实现图片格式转换的示例
Sep 28 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中文本操作的类
2007/03/17 PHP
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
护士自我鉴定总结
2014/03/24 职场文书
平面设计专业求职信
2014/08/09 职场文书
诉讼授权委托书
2014/10/15 职场文书
董存瑞观后感
2015/06/11 职场文书
七一晚会主持词
2015/06/29 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python