python实现进度条的多种实现
作者:IT之一小佬 发布时间:2021-03-20 10:39:52
有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事。
tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持循环处理、多进程、递归处理、还可以结合linux的命令来查看处理情况,等进度展示。
tqdm
在阿拉伯语中的意思是“进展”,是python
中一个快速、扩展性强的进度条工具库,能让我们了解代码的运行进度,也能让我们的运行结果看起来显得更加美观而又高大上!!
先来看一下进度条的效果。
示例代码:
from tqdm import tqdm
for i in tqdm(range(int(9e7))):
pass
运行结果:
可以看到,当我们的代码的运行需要较长时间时,进度条可以很好的帮助我们了解整个代码的运行进度。
一、tqdm相关操作
1、迭代对象处理
对于可以迭代的对象
都可以使用下面这种方式,来实现可视化进度,非常方便。
示例代码:
import time
from tqdm import tqdm
for i in tqdm(range(100)):
time.sleep(0.1)
pass
运行结果:
2、观察处理的数据
通过tqdm
提供的set_description
方法可以实时查看每次处理的数据。
示例代码:
import time
from tqdm import tqdm
pbar = tqdm(["A", "B", "C", "D", "E", "F"])
for i in pbar:
time.sleep(1)
pbar.set_description("Processing %s" % i)
运行结果:
3、pandas中使用tqdm
在pandas
中对大量数据进行相关操作或者遍历表格的行列时,我们可以使用tqdm
来了解代码运行情况。
示例代码:
import time
import pandas as pd
from tqdm import tqdm
df = pd.DataFrame({
'Month': [1, 2, 3, 4, 5, 2, 3, 4, 5, 1, 2, 3, 4],
'Name': ['张三', '张三', '张三', '张三', '张三', '李四', '李四', '李四', '李四', '王五', '王五', '王五', '王五'],
'Sex': ['男', '男', '女', '女', '女', '男', '男', '男', '男', '女', '女', '女', '女']
})
for i in tqdm(['Month', 'Name', 'Sex']):
time.sleep(2)
pass
运行结果:
4、多进程进度条
在使用多进程或者嵌套循环处理任务的时候,我们通过tqdm可以实时查看每一个进程任务的处理情况
示例代码:
import time
from tqdm import tqdm
for i in tqdm(range(5), ascii=False, desc="1st process"):
# ascii = True 时为##
for j in tqdm(range(5), ascii=True, desc="2st process"):
time.sleep(0.1)
运行结果:
5、自定义进度条显示信息
通过update方法可以控制每次进度条更新的进度。
示例代码1:
import time
from tqdm import tqdm
# total参数设置进度条的总长度为100
with tqdm(total=100) as pbar:
for i in range(100):
time.sleep(0.1)
# 每次更新进度条的长度为1
pbar.update(1)
运行结果:
示例代码2:
import time
from tqdm import tqdm
# total参数设置进度条的总长度为500
with tqdm(total=500) as pbar:
for i in range(100):
time.sleep(0.1)
# 每次更新进度条的长度为3
pbar.update(3)
运行结果:
除了上述方法之外,我们还能通过另外一种方法来实现操作。
示例代码3:
import time
from tqdm import tqdm
# total参数设置进度条的总长度为100
pbar = tqdm(total=100)
for i in range(100):
time.sleep(0.1)
# 每次更新进度条的长度为1
pbar.update(1)
# 关闭占用的资源
pbar.close()
运行结果:
另外,我们还能通过set_description
和set_postfix
方法设置进度条显示信息。
示例代码:
import time
from tqdm import trange
from random import random, randint
with trange(100) as t:
for i in t:
# 设置进度条左边显示的信息
# 注意:代码中的GEN是可以手动换成其它内容的
t.set_description("GEN %i" % i)
# 设置进度条右边显示的信息
# 注意:此处代码中的gen lr lst是可以手动换成其它内容的
t.set_postfix(loss=random(), gen=randint(1, 999), lr="h", lst=[1, 2])
time.sleep(0.1)
运行结果:
令人震惊的是,当我们将进度条显示的信息设置
为中文
时,竟然不会出现乱码!!!!
示例代码:
import time
from tqdm import trange
from random import random, randint
with trange(100) as t:
for i in t:
# 设置进度条左边显示的信息
# 注意:代码中的GEN是可以手动换成其它内容的
t.set_description("进度 %i" % i)
# 设置进度条右边显示的信息
# 注意:此处代码中的gen lr lst是可以手动换成其它内容的
t.set_postfix(损失=random(), 随机=randint(1, 999), 名字="h", 列表=[1, 2])
time.sleep(0.1)
运行结果:
6.tqdm(range(n))替换为trange(n)
我们在使用tqdm的时候,可以将tqdm(range(n))替换为trange(n),让你的代码看起来更加简洁而又高大上!
示例代码:
from tqdm import trange
import time
for i in trange(100):
time.sleep(0.1)
pass
运行结果:
7.在jupyter notebook中使用进度条tqdm:
示例代码1:
import time
from tqdm import tqdm
for i in tqdm(range(100)):
print("I'm tqdm!", end=' ')
time.sleep(0.1)
运行结果:
示例代码2:
import time
from tqdm import tqdm_notebook
for i in tqdm_notebook(range(100), desc="demo"):
time.sleep(0.1)
print("I'm tqdm_notebook!", end=' ')
运行结果:
来源:https://blog.csdn.net/weixin_44799217/article/details/116050024


猜你喜欢
- 当我们在安装scrapy的过程中出现了Twisted错误,当我们有继续安装Twisted的时候,又继续报错,通过一系列的查询和了解,终于发现
- 一、Mysql 中索引的创建删除innodb 和 myisam 引擎会自动为主键或者带有 UNIQUE 属性的列建立索引。如果要为其他列建立
- 本节内容:本节内容是根据上学期所上的模式识别课程的作业整理而来,第一道题目是Kmeans聚类算法,数据集是Iris(鸢尾花的数据集),分类数
- 生成器是 Python 的基本组成部分。生成器是一个至少有一个“yield”表达式的函数。它们是可以
- 文章略长,但比较简单。es6中的数组方法some()和every()都接收一个回调函数作为参数,该回调函数又接收三个参数,分别是数组元素、数
- 循环语句(有两种):while 语句for 语句while 语句:问题:输入一个整数n,让程序输出n行的:hello
- 本文实例讲述了Python实现的十进制小数与二进制小数相互转换功能。分享给大家供大家参考,具体如下:十进制小数 ⇒ 二进制小数乘2取整对十进
- 前言:本篇博客继续学习BeautifulSoup,目标站点选取“溧阳摄影圈”,这一地方论坛。目标站点
- <%'asp事务处理。'测试数据库为sql server,服务器为本机,数据库名为test,表名为a,两个字段id(i
- 经常写一些联合查询,联合一多了,代码就成倍的增加,时间一长,连我自己也看不懂到底是什么意思了。做Oracle 的时候,就看到有个 WITH,
- vue封装常用工具类公司要新开一个项目,我来分享一下简单封装常用的工具类首先在util目录下创建一个Common.js文件然后开始封装1.验
- 前面我讲解了如何将树莓派(Raspberry Pi)打造成无线路由,感觉每次通过命令ssh管理显麻烦,于是自己动手编写Web界面,主要是使用
- 简介学习慕课课程,Flask前后端分离API后台接口的实现demo,前端可以接入小程序,暂时已经完成后台API基础架构,使用 postman
- <td width="15%" align="left">是否为分包人&l
- 一、需求准备实现一个前后端实时发送消息的功能,即后端发送一条消息,前端就可以接收到该消息并显示在页面上。二、解决方法利用Flask-Sock
- 一般说来,你会把模板以文件的方式存储在文件系统中,但是你也可以使用自定义的 template loaders 从其他来源加载模板。Djang
- 我们知道了钢琴键盘的音高是其实是有规律的,如下频率翻倍,高一个八度国际基准音:440Hz,钢琴键盘上对应小字一组的la小字一组的la可以看下
- 一、平稳序列建模步骤假如某个观察值序列通过序列预处理可以判定为平稳非白噪声序列,就可以利用ARMA模型对该序列进行建模。建模的基本步骤如下:
- 前言:在转换操作中,我们执行各种操作,例如更改系列的数据类型,将系列更改为列表等。为了执行转换操作,我们有各种有助于转换的功能,例如.ast
- 许多人在数据科学、机器学习、web开发、脚本编写和自动化等领域中都会使用Python,它是一种十分流行的语言。Python流行的部分原因在于