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 命令行非阻塞输入的小例子
Sep 27 Python
Python os模块介绍
Nov 30 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
python 协程 gevent原理与用法分析
Nov 22 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
通过实例了解python__slots__使用方法
Sep 14 Python
5款实用的python 工具推荐
Oct 13 Python
Python四款GUI图形界面库介绍
Jun 05 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
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
js实现登录验证码
2016/12/22 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
在Django的模板中使用认证数据的方法
2015/07/23 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
用pycharm开发django项目示例代码
2018/10/24 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
python如何爬取动态网站
2020/09/09 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
天鹅的故事教学反思
2014/02/04 职场文书
四年级科学教学反思
2014/02/10 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
办公室禁烟通知
2015/04/23 职场文书
2016国庆促销广告语
2016/01/28 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
Java基于字符界面的简易收银台
2021/06/26 Java/Android
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS