让你的代码动起来:Python进度条神器tqdm详解及应用实例
各位Python高手,今天我要给大家介绍一个好用的库,它就是:tqdm
tqdm在阿拉伯语中的意思是 "进展",所以这个库也被称为 "快速进展条"。不得不说,这个名字真的很有创意!
让我们想象一下,你正在运行一个耗时的数据处理任务或者训练一个复杂的深度学习模型。你坐在那里,盯着屏幕,焦急地等待程序完成。这种等待的痛苦,我想你我都有切身体会。这时候,有个可视化的进度条会不会让你感觉好很多呢?这就是我们今天要推荐的 tqdm 库的功能。
tqdm 是一个 Python 快速、可扩展的进度条工具库,它有很多优点:
易于使用:只需在 Python 循环中包裹你的迭代器,一行代码就能产生一个精美的进度条。
灵活:它可以和 for 循环、pandas dataframe的 apply 函数以及 Python 的 map 函数等等配合使用。
高效:tqdm 使用了智能算法,即使在数据流非常快的情况下,也不会拖慢你的代码速度。
让我们看一下 tqdm 在机器学习任务中的应用示例:
from tqdm import tqdm
import time
for i in tqdm(range(100)):
# 假设我们正在进行一些耗时的操作,比如训练深度学习模型
time.sleep(0.01)
运行这段代码,你会看到一个动态更新的进度条。tqdm 会告诉你还有多少项需要处理,预计剩余时间,以及当前的处理速度。
你会看到一个动态更新的进度条。tqdm 会告诉你还有多少项需要处理,预计剩余时间,以及当前的处理速度。
100%|██████████| 100/100 [00:01<00:00, 97.31it/s]
我们继续深入到 tqdm 的更多使用场景和用法。
01

你是否曾在下载大文件时,想要知道下载的进度呢?tqdm 可以很好地满足你的需求。看看下面的代码:
import requests
from tqdm import tqdm
response = requests.get(url, stream=True) # 把stream参数设置为True
file_size = int(response.headers['Content-Length'])
chunk = 1
chunk_size = 1024
num_bars = int(file_size / chunk_size)
with open(filename, 'wb') as fp:
for chunk in tqdm(response.iter_content(chunk_size=chunk_size), total=num_bars, unit='KB', desc=filename, leave=True):
fp.write(chunk)
在上面的代码中,我们首先获取到要下载文件的大小。然后,我们在 tqdm 中设置总的进度条数目为文件大小除以每个进度条代表的字节数。这样,当我们下载每一个字节块并写入文件时,tqdm 就会自动更新进度条。
02

在机器学习中,我们经常需要对大规模的数据进行预处理。使用 tqdm,我们可以很直观地看到数据预处理的进度。
import pandas as pd
from tqdm import tqdm
tqdm.pandas()
# 假设我们有一个大的 dataframe,我们想要对其 'text' 列进行一些预处理
df['processed_text'] = df['text'].progress_apply(lambda x: preprocess(x))
在上面的代码中,我们首先通过 tqdm.pandas() 方法对pandas 进行 patch。然后,我们就可以在 pandas 的 apply 方法中使用 progress_apply,这样就可以在数据处理的同时显示进度条。
03

在训练深度学习模型时,我们经常需要迭代大量的 epochs。使用 tqdm,我们可以清晰地看到模型训练的进度。
from tqdm import tqdm
# 假设我们有一个训练数据集 train_dataloader 和一个模型 model
for epoch in range(num_epochs):
epoch_iterator
= tqdm(train_dataloader, desc=
"Training (Epoch %d)"
% epoch)
for step, batch in enumerate(epoch_iterator):
# 模型训练的代码
# ...
04

在许多情况下,我们的代码可能包含嵌套循环。在这种情况下,我们可以使用 tqdm 创建多个进度条。
from tqdm import tqdm
import time
for i in tqdm(range(100), desc="Outer loop"):
for j in tqdm(range(10), desc="Inner loop", leave=False):
# 执行一些耗时的操作
time.sleep(0.01)
在这段代码中,我们创建了两个进度条,一个用于外部循环,一个用于内部循环。leave=False 选项将在内部循环结束后删除内部循环的进度条。
05

有时候,我们可能需要手动更新进度条。例如,当我们在下载文件或处理批量数据时,我们可能一次处理多个项目。在这种情况下,我们可以使用 update 方法。
from tqdm import tqdm
import time
with tqdm(total=100) as pbar:
for i in range(10):
# 执行一些耗时的操作
time.sleep(0.1)
pbar.update(10)
在这段代码中,我们首先创建了一个进度条,然后在循环中使用 update 方法手动更新进度条的值。
以上就是 tqdm 的一些更深入的用法。你应该可以看出 tqdm 是一个非常强大的工具,无论你在做什么,只要你需要等待,就可以使用 tqdm。希望你可以在你的代码中尝试使用 tqdm,看看它如何提升你的编程体验。

我们的公众号会一直推荐有用的 Python 库和编程技巧,如果你觉得我们的文章有用,请记得关注我们,以便获取更多的内容。让我们一起成为更好的 Python 程序员!


让你的代码动起来:Python进度条神器tqdm详解及应用实例的更多相关文章
- Python进度条模块tqdm实现任务进度可视化
一.前言 tqdm 是一个易用性强.扩展性高的 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息,我们只需要封装任意的迭代器 tqdm(iterator) 即可. 二.安装 ...
- Python - 进度条库 tqdm
前言 在写生成器的时候,网上看到一个进度条库,感觉蛮有意思,记录下 这个库感觉只有在调试的时候会用到,不做深入学习 内置库,不需要安装 示例代码 from tqdm import tqdm for i ...
- 2019年的代码都写完了吗?不如做个Python进度条看看还剩多少
我们都知道,进度条是用来直观展示流程所需时间的优秀工具,以免我们担心流程会突然挂掉,而且我们可以用它来预测代码运行是否正常,借助进度条,每个人都能直观地看到脚本最新的进展情况. 如果你之前没用过进度条 ...
- tqdm:Python 进度条
Tqdm 是 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息.用户只需要封装任意的迭代器,是一个快速.扩展性强的进度条工具库. 用法:tqdm(iterator) 代码地址 ...
- 【转】Python进度条tqdm的使用
有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况.这对于第三方库非常丰富的Python来说,想要实现这一功 ...
- Python安装、配置图文详解(转载)
Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(I ...
- 【和我一起学python吧】Python安装、配置图文详解
Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境( ...
- Python中的高级数据结构详解
这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...
- Python中格式化format()方法详解
Python中格式化format()方法详解 Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法; Python是完全面向对象的语言, 任何东西都是对象; 字符串的参 ...
- python设计模式之装饰器详解(三)
python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...
随机推荐
- Linux Bash Shell 中变量的 5 个易错点
Linux 中的 Bash 脚本支持对变量的操作,下面咸鱼将介绍 Linux Bash Shell 中关于变量的 5 个易错点 因为编程习惯,这类现象往往发生在大多数使用过其他流行编程语言的程序员身上 ...
- 【转载】vue3 中如何像 vue2 的 extend 一样挂载未挂载的组件,拿到标签本身($el)
原文地址:https://blog.csdn.net/qq_39953537/article/details/110437554 vue3 中如何像 vue2 的 extend 一样挂载未挂载的组件, ...
- MySQL 数据库死锁问题
在分析案例之前,我们先了解一下MySQL INNODB.在MySQL INNODB引擎中主键是采用聚簇索引的形式,即在B树的叶子节点中既存储了索引值也存储了数据记录,即数据记录和主键索引是存在一起的. ...
- urlopen()方法的源代码
import urllib.request # 获取目标网址 url = 'https://www.baidu.com/' # 添加请求头 headers = {'User-Agent': 'Mozi ...
- webpack踩坑日记
webpack 4.x 详细入门这是一个大佬的总结,但是我用webpack5重写该demo时,发现了几个有问题的地方1:CleanWebpackPlugin 应该这样: const { CleanWe ...
- 在已有的vue项目中添加单元测试模块
package.json 添加新命令 "test": "jest",下载包: "jest": "^26.6.3", &q ...
- [ACM]快速排序模板
思路 快排基本思路应该就是二分+递归,从两侧同时(实则先从右往左)往中间找,同时和参变量对比,发现位置颠倒后交换位置,然后通过二分将其一块一块的分割开,直到分割到一个元素位置,即完成了快排. 代码 # ...
- Service Mesh之Istio基础入门
技术背景 分布式服务治理 所谓分布式服务治理就是对服务不断增长的复杂度的管控和管理:管控及管理包含网络拓扑变动.网络延时.通信安全.API网关.服务注册和发现.服务熔断容错.服务超时重试.服务部署.数 ...
- vue 之 computed方法自带缓存踩坑1
使用场景:ant-vue 穿梭框使用 页面使用computed方法处理组织结构数据,退出页面时,对加载数据做了set null 操作,再次进入页面时,穿梭框只显示数据,无法做左右穿梭功能. 原因:co ...
- 导致sql注入的根本原因
导致sql注入的根本原因 1.sql注入的定义 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在 ...