Python实现代码统计工具


Posted in Python onSeptember 19, 2019

本文实例为大家分享了Python实现代码统计工具的具体代码,供大家参考,具体内容如下

思路:首先获取所有文件,然后统计每个文件中代码的行数,最后将行数相加.

实现的功能:

统计每个文件的行数;

统计总行数;

支持指定统计文件类型,排除不想统计的文件类型;

排除空行;

排除注释行

import os
import sys
import os.path
#for i in sys.argv:
# print (i)

# 判断单个文件的代码行数
def count_file_lines(file_path):
 line_count = 0
 flag=True
 try:
 fp = open(file_path,"r",encoding="utf-8")
 encoding_type="utf-8"
 fp.close()
 except:
 encoding_type="gbk"
 with open(file_path,"r",encoding=encoding_type) as fp:
 for line in fp:
 #print (line_count)
  if line.strip()=="":
  continue
  else:
  if line.strip().endswith("'''") and flag == False:
   flag=True
   continue
  if line.strip().endswith('"""') and flag == False:
   flag=True
   continue
  if flag == False:
   continue
  if line.strip().startswith("#encoding") or line.strip().startswith("#-*-"):
   line_count += 1
  #elif line.strip().startswith('"""') and line.strip().endswith('"""') and line.strip()!='"""':
 #continue
  #elif line.strip().startswith("'''") and line.strip().endswith("'''") and line.strip()!="'''":
 #continue
  elif line.strip().startswith('#'):
   continue
  elif line.strip().startswith("'''") and flag == True:
   flag = False
   continue
  elif line.strip().startswith('"""') and flag == True:
   flag = False
   continue
  else:
   line_count += 1
 return line_count

def count_code_lines(path,file_types=[]):
 # 判断路径是否存在
 if not os.path.exists(path):
 print("您输入的目录或文件路径不存在")
 return 0

 line_count=0 #代码行总数
 file_lines_dict={} #每个文件代码行数

 # 判断是否为文件
 if os.path.isfile(path):
 file_type = os.path.splitext(path)[1][1:] #取到文件后缀名

 # 判断文件类型是否满足条件
 if len(file_types)==0:
 file_types=["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"]
 if file_type in file_types:
 line_count = count_file_lines(path)
 return line_count
 else:
 file_path = []
 for root, dirs, files in os.walk(path):
  for file in files:
  file_path.append(os.path.join(root,file))
  for f in file_path:
   file_type = os.path.splitext(f)[1][1:]
   if len(file_types)==0:
   file_types=

["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"]
   if file_type not in file_types:
   continue
   line_num = count_file_lines(f)
   line_count += line_num
   file_lines_dict[f] = line_num
  return line_count,file_lines_dict
 

if __name__=="__main__":
 print (sys.argv)
 if len(sys.argv) < 2:
 print ("请输入待统计行数的代码绝对路径!")
 sys.exit()
 count_path = sys.argv[1]
 file_types = []
 if len(sys.argv) >2:
 for i in sys.argv[2:]:
  file_types.append(i)

#print(count_path,file_types)
print(count_code_lines(count_path,file_types))
#print(count_file_lines("b.py"))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
手把手教你用python抢票回家过年(代码简单)
Jan 21 Python
Python聊天室程序(基础版)
Apr 01 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
对python 树状嵌套结构的实现思路详解
Aug 09 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
520使用Python实现“我爱你”表白
May 20 Python
Python生成器传参数及返回值原理解析
Jul 22 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 Python
python实现统计代码行数的小工具
Sep 19 #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
You might like
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
PHP中常用的魔术方法
2017/04/28 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
python调用java的Webservice示例
2014/03/10 Python
python常见数制转换实例分析
2015/05/09 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
浅谈python迭代器
2017/11/08 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
如何通过命令行进入python
2020/07/06 Python
python跨文件使用全局变量的实现
2020/11/17 Python
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
单位创先争优活动方案
2014/01/26 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
学生检讨书
2015/01/27 职场文书
刑事辩护词范文
2015/05/21 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android