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切换pip安装源的方法详解
Nov 18 Python
安装Python的教程-Windows
Jul 22 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
python连接PostgreSQL数据库的过程详解
Sep 18 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
Python实现爬取并分析电商评论
Jun 19 Python
python 下载文件的多种方法汇总
Nov 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
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
js性能优化技巧
2015/11/29 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
使用Python绘制图表大全总结
2017/02/11 Python
python基础教程项目三之万能的XML
2018/04/02 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
python manage.py runserver流程解析
2019/11/08 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
新学期家长寄语
2014/01/19 职场文书
七年级数学教学反思
2014/01/22 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
紫日观后感
2015/06/05 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang