python3使用GUI统计代码量


Posted in Python onSeptember 18, 2019

本文实例为大家分享了python3使用GUI统计代码量的具体代码,供大家参考,具体内容如下

# coding=utf-8
'''
选择一个路径
遍历路径下的每一个文件,统计代码量
字典存储 每一种类型文件的代码行数,eg: *.py -> 行数
全局变量 总行数

需要注意的是,这里仅仅能打开utf-8编码的文件,其他类型的文件无法打开,会出现解码错误
解决方法:使用try-except语句,遇到解码错误就跳过,即 except UnicodeDecodeError:
'''
import easygui as g
import sys
import os

# 全局变量 总行数
total_line_num = 0
# 字典存储 每一种类型文件的代码行数,eg: *.py -> 行数
code_file_dict = {}


def func1(file_path):
  if os.path.isdir(file_path):
    file_list = os.listdir(file_path) # 列出当前路径下的全部内容
    for each in file_list:
      path_plus = file_path + os.sep + each
      if os.path.isdir(path_plus):
        if os.path.basename(path_plus) in [
            'venv', '.idea']: # 如果目录为venv或者.idea,则跳过,不统计
          pass
        else:
          func1(path_plus)
      elif os.path.isfile(path_plus):
        try:
          with open(path_plus, 'r') as f:
            # 每个文件的代码行数
            line_num = 0
            for eachline in f:
              global total_line_num # 声明全局变量
              total_line_num += 1
              line_num += 1
            '''
            将each分割出后缀名,存储在字典中
            '''
            (temp_path, temp_name) = os.path.basename(each).split('.')
            temp = '.' + temp_name
            global code_file_dict
            if temp not in code_file_dict:
              code_file_dict[temp] = line_num
            else:
              code_file_dict[temp] += line_num
        except UnicodeDecodeError:
          pass
  else:
    g.msgbox('该路径只是一个文件', '提示')
    sys.exit(0)


if __name__ == '__main__':
  try:
    dir = g.diropenbox('请选择的你的代码库', '浏览文件夹', default='.')
    func1(dir)
    print(code_file_dict)
    g.textbox(
      '总行数为:{}\n已经完成了{}%\n离十万行代码还差{}行'.format(
        total_line_num,
        (total_line_num / 100000) * 100,
        100000 - total_line_num),
      title='统计结果',
      text=[
        '{a}类型的代码有{b}行\n'.format(a=k,b=v) for k,v in code_file_dict.items()],
      codebox=1)
  except TypeError as reason:
    g.msgbox('取消了统计代码行操作')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python多线程Selenium跨浏览器测试
Apr 01 Python
Python字符编码与函数的基本使用方法
Sep 30 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
儿童python练习实例
May 27 Python
python爬取微信公众号文章
Aug 31 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
关于python字符串方法分类详解
Aug 20 Python
基于Python绘制个人足迹地图
Jun 01 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
详解如何用Python实现感知器算法
Jun 18 Python
django中的图片验证码功能
Sep 18 #Python
python tkinter图形界面代码统计工具
Sep 18 #Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 #Python
Python 元组操作总结
Sep 18 #Python
python sorted函数的小练习及解答
Sep 18 #Python
python 默认参数相关知识详解
Sep 18 #Python
python连接PostgreSQL数据库的过程详解
Sep 18 #Python
You might like
smarty半小时快速上手入门教程
2014/10/27 PHP
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
Mac下安装vue
2018/04/11 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
Python中的各种装饰器详解
2015/04/11 Python
Python 爬虫图片简单实现
2017/06/01 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
PyTorch-GPU加速实例
2020/06/23 Python
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
汽车检测与维修个人求职信
2013/09/24 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
党校毕业个人总结
2015/02/28 职场文书
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
MySQL8.0的WITH查询详情
2021/08/30 MySQL
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android