python实现代码统计程序


Posted in Python onSeptember 19, 2019

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

# encoding="utf-8"

"""
统计代码行数
"""

import sys
import os

def count_file_line(path):
 """统计文件的有效行数"""
 countLine = 0
 # 设置一个标志位,当遇到以"""或者'''开头或者结尾的时候,置为False
 flag = True

 # 使用utf-8格式的编码方式读取文件,如果读取失败,将使用gbk编码方式读取文件
 try:
 fp = open(path, "r", encoding="utf-8")
 encoding_type = "utf-8"
 fp.close()
 except:
 encoding_type = "gbk"

 with open(path, "r", encoding=encoding_type) as fp:
 for line in fp:
  # 空行不统计
  if line.strip():
  line = line.strip()
  # 注意下面的这两个elif必须要前面,这样子当('"""')结束之后及时将flag置为True
  if line.endswith('"""') and flag == False:
   flag = True
   continue
  if line.endswith("'''") and flag == False:
   flag = True
   continue
  if flag == False:
   continue
  if line.startswith("#!") or line.startswith("#-*-") or line.startswith("# encoding"):
   countLine += 1
  # 如果以“#”号开头的,不统计
  elif line.startswith("#"):
   continue
  # 如果同时以("'''")或者('"""')开头或者结尾(比如:"""aaa"""),那么不统计
  elif line.startswith('"""') and line.endswith('"""') and line != '"""':
   continue
  elif line.startswith("'''") and line.endswith("'''") and line != "'''":
   continue
  # 如果以("'''")或者('"""')开头或者结尾(比如:aaa"""或者"""bbb),那么不统计
  # 注意下面的这两个elif必须要放后面
  elif line.startswith('"""') and flag == True:
   flag = False
   continue
  elif line.startswith("'''") and flag == True:
   flag = False
   continue
  else:
   countLine += 1
 return countLine

def count_codes(path,file_types=[]):
 """统计所有文件代码行"""
 # 判断path是目录还是文件,如果是目录的话,遍历目录下所有的文件
 if not os.path.exists(path):
 print("您输入的路径不存在!")
 return 0
 countTotalLine = 0
 file_paths = {}
 if os.path.isdir(path):
 for root,dirs,files in os.walk(path):
  for name in files:
  if not file_types:
   file_types = ["txt","py"]
   # print(file_types)
  if os.path.splitext(name)[1][1:] in file_types:
   file_path = os.path.normpath(os.path.join(root,name))
   # print(file_path)
   file_lines = count_file_line(file_path)
   countTotalLine += file_lines
   file_paths[file_path] = file_lines
 else:
 if not file_types:
  file_types = ["txt","py"]
 if os.path.splitext(path)[1][1:] in file_types:
  countTotalLine = count_file_line(path)
  file_paths[path] = count_file_line(path)

 return countTotalLine,file_paths


if __name__ == "__main__":
 # 打印出命令行输入的参数
 # print(sys.argv)
 if len(sys.argv) < 2:
 print("请输入路径!")
 sys.exit()
 path = sys.argv[1]
 # print(path)
 file_types = sys.argv[2:]
 # print(file_types)
 print(count_codes(path,file_types))

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

Python 相关文章推荐
Python实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
python 高效去重复 支持GB级别大文件的示例代码
Nov 08 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
Python的log日志功能及设置方法
Jul 11 Python
Django Rest framework认证组件详细用法
Jul 25 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
Pandas实现DataFrame按行求百分数(比例数)
Dec 27 Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 #Python
python3获取url文件大小示例代码
Sep 18 #Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
Sep 18 #Python
python3使用GUI统计代码量
Sep 18 #Python
django中的图片验证码功能
Sep 18 #Python
python tkinter图形界面代码统计工具
Sep 18 #Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 #Python
You might like
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
PHP中用hash实现的数组
2011/07/17 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
js 单引号 传递方法
2009/06/22 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
使用requests库制作Python爬虫
2018/03/25 Python
python3实现高效的端口扫描
2019/08/31 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
剪彩仪式主持词
2014/03/19 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
学习普通话的体会
2014/11/07 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
湘江北去观后感
2015/06/15 职场文书
少先队入队仪式主持词
2015/07/04 职场文书