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列表操作使用示例分享
Feb 21 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
使用Python 统计高频字数的方法
Jan 31 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
TensorFlow实现自定义Op方式
Feb 04 Python
python中shell执行知识点
May 06 Python
详解Python的爬虫框架 Scrapy
Aug 03 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中动态HTML的输出技术
2006/10/09 PHP
PHP多文件上传实例
2015/07/09 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
python新手经常遇到的17个错误分析
2014/07/30 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
Python3 元组tuple入门基础
2020/02/09 Python
Python pip配置国内源的方法
2020/02/14 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
微观物理专业自荐信
2014/01/26 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
亲子活动总结
2014/04/26 职场文书
承诺书格式
2014/06/03 职场文书
行风评议整改报告
2014/11/06 职场文书
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏