python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python进度条神器tqdm

Python进度条神器tqdm的使用指南

作者:白酒永远的神

在日常使用 Python 进行数据处理、模型训练或批量任务时,我们常常会遇到长时间运行的循环,tqdm是一个快速、可扩展且美观的进度条库,能够轻松地为你的 Python 循环添加进度提示,本文给大家介绍了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]

其中包含:

三、常用参数详解

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]

关键方法:

六、与 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 次(可通过 minitersmininterval 调整),对程序性能影响微乎其微。即使在高频循环中,也可以放心使用。

九、小贴士

结语

tqdm 是 Python 开发者提升用户体验和调试效率的利器。无论是训练深度学习模型、处理大规模数据,还是简单的脚本任务,只需一行代码,就能让你的程序“看得见进度”。

记住:好的工具不在于复杂,而在于恰到好处的优雅。

赶快在你的下一个项目中试试 tqdm 吧!

以上就是Python进度条神器tqdm的使用指南的详细内容,更多关于Python进度条神器tqdm的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文