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中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 Python
django 解决manage.py migrate无效的问题
May 27 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
Pandas之ReIndex重新索引的实现
Jun 25 Python
Python 3.8 新功能全解
Jul 25 Python
python3 写一个WAV音频文件播放器的代码
Sep 27 Python
简单了解django处理跨域请求最佳解决方案
Mar 25 Python
Python如何获取文件指定行的内容
May 27 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
keras分类之二分类实例(Cat and dog)
Jul 09 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
python游戏开发之pygame实现接球小游戏
Apr 22 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
全球度假村:Club Med
2017/11/27 全球购物
运动会入场式解说词
2014/02/18 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
代收款委托书范本
2014/10/01 职场文书
高中美术教学反思
2016/02/17 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL