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 相关文章推荐
windows下python模拟鼠标点击和键盘输示例
Feb 28 Python
详解Python中的__init__和__new__
Mar 12 Python
使用Python编写Linux系统守护进程实例
Feb 03 Python
python通过pil模块获得图片exif信息的方法
Mar 16 Python
Python使用win32com实现的模拟浏览器功能示例
Jul 13 Python
Python实现类的创建与使用方法示例
Jul 25 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
Python字典底层实现原理详解
Dec 18 Python
python程序的组织结构详解
Dec 06 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
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
2014/06/20 Javascript
window.onload使用指南
2015/09/13 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
python实现拓扑排序的基本教程
2018/03/11 Python
深入浅析Python的类
2018/06/22 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
怎样自定义一个异常类
2016/09/27 面试题
护理专科毕业生自荐书范文
2014/02/19 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
应届生求职信范文
2014/06/30 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
消费者投诉书范文
2015/07/02 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript