Python进度条神器tqdm的使用指南
在日常使用 Python 进行数据处理、模型训练或批量任务时,我们常常会遇到长时间运行的循环。如果没有一个直观的反馈机制,用户很容易误以为程序卡死或者失去耐心。这时候,tqdm 就派上用场了!
tqdm(读作 “taqadum”,阿拉伯语意为“进展”)是一个快速、可扩展且美观的进度条库,能够轻松地为你的 Python 循环添加进度提示。它轻量、高效,并且兼容性极强。
一、安装 tqdm
tqdm 是一个第三方库,可以通过 pip 轻松安装:
pip install tqdm
如果你使用的是 Jupyter Notebook,建议同时安装 ipywidgets 以获得更好的交互体验:
pip install ipywidgets jupyter nbextension enable --py widgetsnbextension
二、基本用法:一行代码添加进度条
最简单的用法就是将 tqdm 包裹在任何可迭代对象外面:
from tqdm import tqdm
import time
for i in tqdm(range(100)):
time.sleep(0.01) # 模拟耗时操作
运行后你会看到类似这样的输出:
100%|██████████| 100/100 [00:01<00:00, 95.23it/s]
其中包含:
- 进度百分比
- 可视化进度条
- 已完成 / 总数
- 已用时间 < 预计剩余时间
- 每秒迭代次数(iterations per second)
三、常用参数详解
tqdm() 支持多个参数来自定义进度条行为:
| 参数 | 说明 |
|---|---|
desc | 进度条前缀描述 |
total | 总迭代次数(当迭代器长度未知时需手动指定) |
unit | 迭代单位(如 ‘file’, ‘image’) |
unit_scale | 自动缩放单位(如 KB/MB) |
leave | 循环结束后是否保留进度条(默认 True) |
ncols | 进度条宽度(字符数) |
colour | 进度条颜色(如 ‘green’, ‘#ff0000’) |
示例:带描述和自定义单位
from tqdm import tqdm
import time
for i in tqdm(range(50), desc="Processing", unit="item", colour="green"):
time.sleep(0.05)
输出效果:
Processing: 100%|██████████| 50/50 [00:02<00:00, 20.12item/s]
四、处理嵌套循环
tqdm 支持多层嵌套进度条,只需分别包裹每一层:
from tqdm import tqdm
import time
for i in tqdm(range(3), desc="Outer"):
for j in tqdm(range(100), desc="Inner", leave=False):
time.sleep(0.01)
Outer: 0%| | 0/3 [00:00<?, ?it/s] Inner: 0%| | 0/100 [00:00<?, ?it/s] Inner: 10%|█ | 10/100 [00:00<00:00, 94.52it/s] Inner: 20%|██ | 20/100 [00:00<00:00, 94.96it/s] Inner: 30%|███ | 30/100 [00:00<00:00, 94.97it/s] Inner: 40%|████ | 40/100 [00:00<00:00, 94.88it/s] Inner: 50%|█████ | 50/100 [00:00<00:00, 94.48it/s] Inner: 60%|██████ | 60/100 [00:00<00:00, 94.40it/s] Inner: 70%|███████ | 70/100 [00:00<00:00, 93.65it/s] Inner: 80%|████████ | 80/100 [00:00<00:00, 94.03it/s] Inner: 90%|█████████ | 90/100 [00:00<00:00, 93.76it/s] Inner: 100%|██████████| 100/100 [00:01<00:00, 93.81it/s] Outer: 33%|███▎ | 1/3 [00:01<00:02, 1.06s/it] Inner: 0%| | 0/100 [00:00<?, ?it/s] Inner: 10%|█ | 10/100 [00:00<00:00, 92.40it/s] Inner: 20%|██ | 20/100 [00:00<00:00, 92.28it/s] Inner: 30%|███ | 30/100 [00:00<00:00, 92.16it/s] Inner: 40%|████ | 40/100 [00:00<00:00, 92.55it/s] Inner: 50%|█████ | 50/100 [00:00<00:00, 92.10it/s] Inner: 60%|██████ | 60/100 [00:00<00:00, 92.32it/s] Inner: 70%|███████ | 70/100 [00:00<00:00, 93.00it/s] Inner: 80%|████████ | 80/100 [00:00<00:00, 93.31it/s] Inner: 90%|█████████ | 90/100 [00:00<00:00, 93.02it/s] Inner: 100%|██████████| 100/100 [00:01<00:00, 93.08it/s] Outer: 67%|██████▋ | 2/3 [00:02<00:01, 1.07s/it] Inner: 0%| | 0/100 [00:00<?, ?it/s] Inner: 10%|█ | 10/100 [00:00<00:00, 91.33it/s] Inner: 20%|██ | 20/100 [00:00<00:00, 91.54it/s] Inner: 30%|███ | 30/100 [00:00<00:00, 92.87it/s] Inner: 40%|████ | 40/100 [00:00<00:00, 92.91it/s] Inner: 50%|█████ | 50/100 [00:00<00:00, 93.23it/s] Inner: 60%|██████ | 60/100 [00:00<00:00, 92.99it/s] Inner: 70%|███████ | 70/100 [00:00<00:00, 92.75it/s] Inner: 80%|████████ | 80/100 [00:00<00:00, 93.23it/s] Inner: 90%|█████████ | 90/100 [00:00<00:00, 92.88it/s] Inner: 100%|██████████| 100/100 [00:01<00:00, 93.16it/s] Outer: 100%|██████████| 3/3 [00:03<00:00, 1.07s/it]
注意:内层循环通常设置 leave=False,避免屏幕被大量历史进度条刷屏。
五、手动控制进度
有时你无法使用 for 循环(比如在 while 中),这时可以使用 tqdm 的手动更新方式:
from tqdm import tqdm
import time
pbar = tqdm(total=100, desc="Manual")
current = 0
while current < 100:
time.sleep(0.02)
increment = min(10, 100 - current)
pbar.update(increment)
current += increment
pbar.close()
Manual: 100%|██████████| 100/100 [00:00<00:00, 488.25it/s]
关键方法:
pbar.update(n):前进 n 步pbar.close():关闭进度条(释放资源)
六、与 pandas 集成
tqdm 还能与 pandas 无缝集成,用于显示 apply()、groupby() 等操作的进度:
import pandas as pd
from tqdm import tqdm
# 启用 pandas 支持
tqdm.pandas(desc="Pandas Apply")
df = pd.DataFrame({'x': range(1000)})
df['x_squared'] = df['x'].progress_apply(lambda x: x ** 2)
Pandas Apply: 100%|██████████| 1000/1000 [00:00<00:00, 602803.10it/s]
七、Jupyter Notebook 中的特殊支持
在 Jupyter 中,推荐使用 tqdm.notebook.tqdm,它会渲染出更美观的 HTML 进度条:
from tqdm.notebook import tqdm
import time
for i in tqdm(range(100)):
time.sleep(0.01)
效果是带有颜色和动态更新的图形化进度条,体验更佳。
八、性能影响
tqdm 的设计非常高效,默认每秒最多刷新 10 次(可通过 miniters 或 mininterval 调整),对程序性能影响微乎其微。即使在高频循环中,也可以放心使用。
九、小贴士
- 如果你在服务器或无终端环境中运行(如某些 CI/CD 环境),tqdm 会自动检测并禁用进度条,避免输出混乱。
- 可通过
disable=True强制关闭进度条(便于调试或日志记录)。 - 使用
logging时,建议将 tqdm 输出重定向到sys.stderr(默认行为),避免干扰日志流。
结语
tqdm 是 Python 开发者提升用户体验和调试效率的利器。无论是训练深度学习模型、处理大规模数据,还是简单的脚本任务,只需一行代码,就能让你的程序“看得见进度”。
记住:好的工具不在于复杂,而在于恰到好处的优雅。
赶快在你的下一个项目中试试 tqdm 吧!
以上就是Python进度条神器tqdm的使用指南的详细内容,更多关于Python进度条神器tqdm的资料请关注脚本之家其它相关文章!
相关文章
python tkinter GUI绘制,以及点击更新显示图片代码
这篇文章主要介绍了python tkinter GUI绘制,以及点击更新显示图片代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-03-03
详解Python中的__new__、__init__、__call__三个特殊方法
用双下划线包围的特殊方法在Python中又被成为魔术方法,类似于C++等语言中的构造函数,这里我们就来详解Python中的__new__、__init__、__call__三个特殊方法:2016-06-06


最新评论