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 抓取动态网页内容方案详解
Dec 25 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
Python随手笔记第一篇(2)之初识列表和元组
Jan 23 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
May 05 Python
分享几道你可能遇到的python面试题
Jul 24 Python
python中hashlib模块用法示例
Oct 30 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
Django中使用第三方登录的示例代码
Aug 20 Python
Python文件读写保存操作的示例代码
Sep 14 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
如何清空python的变量
Jul 05 Python
python 实现一个简单的线性回归案例
Dec 17 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个人网站架设连环讲(二)
2006/10/09 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
2013/06/24 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
深入浅出es6模板字符串
2017/08/26 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
python迭代器的使用方法实例
2013/11/21 Python
java直接调用python脚本的例子
2014/02/16 Python
python进阶教程之词典、字典、dict
2014/08/29 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
简单了解python中的与或非运算
2019/09/18 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
写好自荐信的几个要点
2013/12/26 职场文书
主持词开场白
2014/03/17 职场文书
2014年度个人工作总结
2014/11/07 职场文书
公司总经理岗位职责
2015/04/01 职场文书
政协工作总结2015
2015/05/20 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
晚会开幕词范文
2016/03/04 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP