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 21 Python
python字符串连接的N种方式总结
Sep 17 Python
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
Python最基本的输入输出详解
Apr 25 Python
利用python画一颗心的方法示例
Jan 31 Python
Django实现简单分页功能的方法详解
Dec 05 Python
谈谈Python中的while循环语句
Mar 10 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
使用Python和Scribus创建一个RGB立方体的方法
Jul 17 Python
Python实现分数序列求和
Feb 25 Python
pyx文件 生成pyd 文件用于 cython调用的实现
Mar 04 Python
python简单验证码识别的实现过程
Jun 20 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中jsonp的跨域实例
2013/06/21 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
php排序算法实例分析
2016/10/17 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
python抽取指定url页面的title方法
2018/05/11 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
更新升级python和pip版本后不生效的问题解决
2020/04/17 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
python字典key不能是可以是啥类型
2020/08/04 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
酒店应聘自荐信
2013/11/09 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书