Python中tqdm进度条的详细介绍(安装程序与耗时的迭代)

news2024/11/23 9:25:57

平时在做一些测试时候,是没有进度条出现的,这跟大家pip安装程序不一样(有安装进度条),比如做遍历的时候:

for i in range(10):
    time.sleep(0.5)
    print(i)

只是每过0.5秒就进行打印输出,在这个等待过程是没有任何提示的,所以说如果是一个安装程序或者运行一个特别耗时的程序,这个时候,顾客就不知道还要多久才能完成,就造成不好的用户体验,如果在这个时候我们给这个程序的执行过程加一个进度条那就效果好很多了。

这个在Faster RCNN的test.py中有出现:

    with tqdm(total=imdb.num_images) as pbar:
        for i, data_batch in enumerate(test_data):
            # 前向计算
            im_info = data_batch.data[1][0]
            mod.forward(data_batch)
            rois, scores, bbox_deltas = mod.get_outputs()
            rois = rois[:, 1:]
            scores = scores[0]
            bbox_deltas = bbox_deltas[0]

            det = im_detect(rois, scores, bbox_deltas, im_info,
                            bbox_stds=args.rcnn_bbox_stds, nms_thresh=args.rcnn_nms_thresh,
                            conf_thresh=args.rcnn_conf_thresh)
            for j in range(1, imdb.num_classes):
                indexes = np.where(det[:, 0] == j)[0]
                all_boxes[j][i] = np.concatenate((det[:, -4:], det[:, [1]]), axis=-1)[indexes, :]#axis=-1表最后维
            pbar.update(data_batch.data[0].shape[0])

    # 评估模型
    imdb.evaluate_detections(all_boxes)

这个目标检测比较耗时,所以使用进度条的形式,可以了解到具体检测到哪儿来了。

接下来我们进行安装与测试,这个tqdm到底如何使用。

安装tqdm

需要导入tqdm

from tqdm import tqdm

当然如果没有安装tqdm的话,将会报错:

ModuleNotFoundError: No module named 'tqdm'

安装即可,带上豆瓣镜像地址:

pip install tqdm -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

安装很简单,然后我们来个简单的测试,如下:

import time
for i in tqdm(range(10)):
    time.sleep(0.5)
100%|███████████████████████████████████| 10/10 [00:05<00:00,  1.96it/s]

这里就会出现一个进度条的动画,每0.5秒进度就会往后面累加直到全部完成。

这里的tqdm(range(10)),其中里面是range,我们可以简化成trange,等价于trange(10),如下:

from tqdm import trange
for i in trange(10):
    time.sleep(0.5)
    print(i)

设置进度条颜色

我们还可以对进度条设置颜色,变得更加的美观和醒目

for i in tqdm(range(10),colour="green",desc="运行进度"):
    time.sleep(0.5)
    print(i)

为了显示效果,截图如下:

当然这个描述还可以显得更贴心点:

l = ['a', 'b', 'c', 'd', 'e']
pbar = tqdm(l)
for i in pbar:
    time.sleep(0.2)
    pbar.set_description('进度'+i)

update方法

使用update方法来控制进度条的更新进度,这里的tqdm里面的参数可以不是迭代类型,只需设定总任务大小,这里就跟上面的模型检测的方法一样了。

with tqdm(total=200) as pbar:
    for i in range(20):
        time.sleep(1) 
        pbar.update(10)#总任务是200,每次更新10

或者

pbar = tqdm(total=200)
for i in range (20):
    time.sleep(1)
    pbar.update(10)

pbar.close()

100%|██████████████████████████████████████| 200/200 [00:20<00:00,  9.88it/s] 

更细化的还可以指定进度条的长度,单位类型等

with tqdm(total=100, desc='进度条', ncols=80, unit='B') as pbar:
    for i in range(10):
        time.sleep(1)
        pbar.update(10)
进度条:  90%|███████████████████████████████▌   | 90/100 [00:09<00:01,  9.94B/s]

write方法

可以完成了多少做个提示,这里的tqdm.write效果可跟print不一样,有兴趣的可以试试

pbar = trange(10)
for i in pbar:
    time.sleep(1)
    if not (i % 3):
        tqdm.write('完成进度 %i' %i)
完成进度 0
完成进度 3
完成进度 6
完成进度 9
100%|██████████████████████████████████████████████████████| 10/10 [00:10<00:00,  1.01s/it]

多循环进度条

多个循环嵌套,比如说两个for循环,里面的每次循环之后,外循环的进度条就累加,当内循环处理完毕之后,内部的进度条消失,最终留下总任务的进度条!

for i in trange(10, colour='red', desc='总的进度'):
    for i in trange(5, colour = 'green', desc='分支任务进度', leave=False):
        time.sleep(0.1)

如图:

也可以使用bar_format来制作,其中{bar:60}表示进度条长度,{n}/{total}表示当前进度和总进度

for i in tqdm(range(100), bar_format='\033[44m{bar:60}\033[0m {n}/{total}'):
    time.sleep(0.1)

其中\033[44m是ANSI 颜色码,这里是底色为蓝色,进度条是白色的情况

想要了解更多关于tqdm有哪些方法和属性,可以dir查询

>>>dir(tqdm)
['__bool__', '__class__', '__contains__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_comparable', '_decr_instances', '_get_free_pos', '_instances', '_lock', 'clear', 'close', 'display', 'external_write_mode', 'format_dict', 'format_interval', 'format_meter', 'format_num', 'format_sizeof', 'get_lock', 'monitor', 'monitor_interval', 'moveto', 'pandas', 'refresh', 'reset', 'set_description', 'set_description_str', 'set_lock', 'set_postfix', 'set_postfix_str', 'status_printer', 'unpause', 'update', 'wrapattr', 'write']
>>>help(tqdm)
__init__(self, iterable=None, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None, ascii=None, disable=False, unit='it', unit_scale=False, dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, position=None, postfix=None, unit_divisor=1000, write_bytes=None, lock_args=None, nrows=None, colour=None, delay=0, gui=False, **kwargs)

其中参数 unit='it' 这里的例子是处理字节,进度条后面类似9.88it/s这样,如果是图片的话,就是img/s结尾

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP ADM100-2.1 SAP系统启停过程

一、SAP系统开启过程 在SAP系统使用过程中维护硬件和修改SAP系统配置文件后重启SAP系统是有必要的。开启SAP系统是每个SAP系统管理员应该熟悉的初始过程。 每个SAP系统包含一个数据库和至少一个实例,JAVA栈SAP系统还有一个CS中央服务实例,ABAP栈SAP系统含有一个ABAP CS中央服…

springboot2.5集成log4j2报错

报错信息&#xff1a; SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 修改依赖 把依…

【01Studio MaixPy AI K210】22.ESP8266与服务器连接的问题及处理

目录 前提 问题 处理 前提 WiFi的账号密码输入正确 ESP8266的主题与服务器的主题一致 代码的服务器网址正确 ESP8266正确连接核心板的引脚 ESP8266返回“OK” simple.py文件以发送到开发板 WiFi已打开 问题 1.连接上WiFi&#xff0c;已输出IP信息&#xff0c;但是仍然…

48.Isaac教程--GMapping应用程序

GMapping应用程序 GMapping 是一个使用 OpenSlam 软件库的地图生成工具。 该应用程序允许您创建地图以在其他应用程序中使用。 GMapping 应用程序使用 Carter 参考机器人的 LIDAR 功能。 注意 建图是一项计算密集型和存储密集型活动&#xff0c;可能需要微调才能生成合适的…

Hive(1):Apache Hive入门

1 Apache Hive概述 1.1 什么是Hive Apache Hive是一款建立在Hadoop之上的开源数据仓库系统&#xff0c;可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表&#xff0c;基于表提供了一种类似SQL的查询模型&#xff0c;称为Hive查询语言&#xff08;HQL&a…

记OPNsense防火墙的安装过程 - 安全

前些天在网上看到防火墙软件OPNsense&#xff0c;对其有了兴趣&#xff0c;以前写过一个其前面的一个软件M0n0wall( 关于m0n0wall的安装及配置 )&#xff0c;当时也是非常有名的防火墙&#xff0c;现在有了OPNsense&#xff0c;这个老防火墙已经停止更新了。 下面对OPNsense防火…

MFC如何实现屏幕截图

目录一 程序实现效果二 程序实现思路三 具体实现一 程序实现效果 本文描述了MFC中实现屏幕截图的一种方式&#xff0c;程序界面如下&#xff1a; 单击【开始截屏】&#xff0c;按住鼠标左键&#xff0c;一直拖动到需要截屏的矩形的右下角&#xff0c;松开鼠标左键&#xff0c…

工业设备数据采集调研要点

一、概述 当一家客户提出需要采集设备的数据&#xff0c;通常需要对设备、通讯、采集方案进行确认。此时我们需要做两件事&#xff1a; 1、向客户要设备清单&#xff0c;便于确认设备的数量。&#xff08;客户提供&#xff09; 2、确认设备信息、通讯接口信息、采集方案。&a…

图文详解 Java 泛型,写得太好了!

一、泛型的引入我们都知道&#xff0c;继承是面向对象的三大特性之一&#xff0c;比如在我们向集合中添加元素的过程中add()方法里填入的是Object类&#xff0c;而Object又是所有类的父类&#xff0c;这就产生了一个问题——添加的类型无法做到统一 由此就可能产生在遍历集合取…

OpenShift 4 - 在单节点 OpenShift 上部署 ODF 存储软件

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.12 的 OpenShift Local 环境中验证 文章目录什么是 ODF LVM &#xff1f;为 OpenShift Local 增加额外存储设备安装并配置 ODF LVM Operator使用 ODF 创建 PVC/PV 验证什么是 ODF LVM &…

Mock的接口自动化测试如何测?

1.Mock实现原理和实现机制 在某些时候&#xff0c;后端在开发接口的时候&#xff0c;处理逻辑非常复杂&#xff0c;在测试的时候&#xff0c;后端在未完成接口的情况下该如何去测试呢&#xff1f; 我们需要测试&#xff0c;但是有些请求又需要修改一下参数&#xff0c;或者改…

寻找适合程序员的笔记软件

做为一个程序员,有两个东西是我们必需的.一个是搜索,另一个则是记录. 当我们遇到不会或解决不了的困难点时,我们会第一时间使用搜索(如Google)来寻找解决方案,而当我们积累与在技术上有任何心得时,我们会记录它. 因而,寻找一个合适的笔记软件,对程序员非常重要. 一) 程序员…

Apache Spark 机器学习 特征转换 1

分词器&#xff08;Tokenizer&#xff09; 分词是一个处理过程&#xff0c;其将文本句子分割成一系列独立的单词词汇集合&#xff0c;Spark提供Tokenizer分词器类&#xff0c;其提供的功能是使用分隔符的方式处理文本句子的特征转换&#xff0c;Spark提供RegexTokenizer分词器…

在PC上安装OpenSSL,生成证书

文章目录一.在编程 PC 上安装 OpenSSL1. 下载安装 OpenSSL2.生成CA认证3. 生成 Broker 证书4. 生成各个 Client 的证书一.在编程 PC 上安装 OpenSSL 为了使用带 TLS 安全证书的 ADS Over MQTT&#xff0c;在 MQTT 的 Server 和 Client 侧都需要证书以进行安全通信&#xff0c;…

安装vue-cli2和3以及创建vue2和vue3项目的步骤及区别

文章目录安装vue-cli2版本步骤1.下载vue-cli2问题1&#xff1a;安装Vue Cli出现EEXIST: file already exists, cmd shim ‘C:\Users\2.vue-cli2构建vue项目问题2&#xff1a;报错&#xff1a; vue-cli Failed to download repo vuejs-templates/webpack: connect ETIMEDOUT 19…

「兔了个兔」福兔贺春,纯CSS实现超精美月兔404界面(附源码)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

搭建一个FAQ智能问答系统/服务

FAQ智能问答系统 介绍 项目传送门&#xff1a;https://github.com/wzzzd/FAQ_system 构建了一个FAQ智能问答系统。 使用多种方法&#xff0c;实现FAQ的问题-模板匹配功能。 使用Tornado框架&#xff0c;部署成轻量级的Web服务应用。 整体框架如下。 流程 1.初始化流程 1.…

这福利给你要不要 — 用Python采集相亲网站女生数据

前言 俗话说学咱这行的男同志 找对象容易吗 这马上就要过完年了 是时候找找女朋友了 我在这里摸索到了个网站 或许你们可以来看看 送一波单身福利 不需要的也可以学学怎么采集这些数据呗 环境与模块 环境开发 Python 3.8Pycharm 模块使用 import parsel --> p…

类与对象的原理

前言 在JavaScript中&#xff0c;类的实现是基于原型继承机制的。 JavaScript中的类的一个重要特性是“动态可继承”。 类与原型 在JavaScript中&#xff0c;类的所有实例对象都从同一个原型对象上继承属性&#xff0c;因此原型对象是类的核心。 所有的类都有一个共同的根…

关系数据库——关系操作和关系完整性

文章目录一、关系操作1.基本的关系操作2.关系数据语言的分类关系代数语言关系演算语言具有关系代数和关系演算双重特点的语言二、关系的完整性1.实体完整性(Entity Integrity)实体完整性规则2.参照完整性(Referential Integrity)参照完整性规则引用关系3.用户定义的完整性(User…