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中操作字典之fromkeys()方法的使用
May 21 Python
python实现中文分词FMM算法实例
Jul 10 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
Python解析json代码实例解析
Nov 25 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
django orm模块中的 is_delete用法
May 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 curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
js 上传图片预览问题
2010/12/06 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python文件读取的3种方法及路径转义
2015/06/21 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
物业管理公司实习生自我鉴定
2013/09/19 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
留学推荐信写作指南
2014/01/25 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书