当前位置:首页>python>Python 里最会“报进度”的小工具:tqdm

Python 里最会“报进度”的小工具:tqdm

  • 2026-10-11 05:48:24
Python 里最会“报进度”的小工具:tqdm

写 Python 程序时,你有没有遇到过这种场景:

代码已经运行了 5 分钟,屏幕却一点反应都没有。你不知道它是在认真工作,还是已经卡死。你也不知道还要等 10 秒、10 分钟,还是干脆等不到结果。这时候,一个看似不起眼的小工具就很有用了:tqdm。

tqdm 是 Python 里非常常用的进度条库。它的作用很简单:让程序在处理循环任务时,把“当前进度、处理速度、剩余时间”等信息显示出来。

一句话概括就是:

tqdm 让 Python 程序不再“闷头干活”,而是边干边告诉你进度。

一、为什么需要 tqdm?

很多 Python 程序都会涉及循环,比如:

读取一批文件;
处理几万条数据;
下载多个资源;
训练机器学习模型;
爬取网页内容;
批量压缩图片;
遍历一个很大的列表。

这些任务往往不是一秒钟就结束的。如果没有进度提示,用户只能盯着空白的终端窗口发呆。

比如下面这段代码:

import timefor i in range(100):    time.sleep(0.1)

它会运行一段时间,但你看不到任何反馈。

加上 tqdm 之后:

from tqdm import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(0.1)

运行时,终端里就会出现类似这样的进度条:

76%|███████████████████████       | 76/100 [00:07<00:02, 9.87it/s]

这一行信息看起来不复杂,但很有用。它告诉你当前完成了多少、总量是多少、已经运行多久、预计还剩多久,以及每秒大约能处理多少次。

二、tqdm 最核心的用法:包一层就行

tqdm 的设计非常轻量,最常见的用法就是:

from tqdm import tqdm

for item in tqdm(iterable):
    do_something(item)

也就是说,原来你写:

for item in data:
    process(item)

现在只需要改成:

for item in tqdm(data):
    process(item)

它不改变原来的循环逻辑,只是在外面加了一层“进度显示”。

这也是 tqdm 受欢迎的重要原因:它很少打扰原有代码。

三、安装方式

安装也很简单:

pip install tqdm
如果你使用的是 Anaconda,也可以用:
conda install tqdm

安装完成后,就可以在 Python 脚本中导入使用:

from tqdm import tqdm
四、几个常见使用场景

1. 普通循环

from tqdm import tqdm
import time

for i in tqdm(range(1000)):
    time.sleep(0.01)

适合用来观察长循环的执行进度。

2. 遍历列表

from tqdm import tqdm

names = ["Alice", "Bob", "Cindy", "David"]

for name in tqdm(names):
    print(name)

只要对象可以被循环遍历,通常就可以交给 tqdm。

3. 给进度条加说明文字

from tqdm import tqdm
import time

for i in tqdm(range(100), desc="正在处理数据"):
    time.sleep(0.05)

运行时,进度条前面会显示“正在处理数据”,适合让输出更清晰。

4. 在 pandas 中使用

处理 DataFrame 时,也可以让 apply 显示进度。

import pandas as pd
from tqdm import tqdm

tqdm.pandas()

df["result"] = df["text"].progress_apply(lambda x: len(x))

平时用 df["text"].apply(...) 时,数据量一大就容易不知道处理到哪了。换成 progress_apply 后,就可以看到进度条。

5. 在 Jupyter Notebook 中使用

如果你在 Jupyter Notebook 里写代码,可以使用:

from tqdm.notebook import tqdm

for i in tqdm(range(100)):
    pass

这样显示效果会更适合 Notebook 页面。

五、tqdm 显示的信息是什么意思?

一条常见的 tqdm 进度条可能长这样:

100%|████████████████████████████| 1000/1000 [00:10<00:00, 98.7it/s]

可以拆开理解:

100%:任务完成百分比。
1000/1000:当前完成数量 / 总数量。
00:10:已经运行的时间。
00:00:预计剩余时间。
98.7it/s:每秒处理约 98.7 次迭代。

这里的 it/s 是 iterations per second,也就是“每秒迭代次数”。

对数据处理、爬虫、模型训练这类任务来说,这些信息非常实用。你不仅知道程序还活着,还能粗略判断它的运行效率。

六、什么时候适合用 tqdm?

tqdm 特别适合下面几类任务:

第一,循环次数比较多。
比如几千次、几万次、几十万次。

第二,每次循环耗时相对明显。
比如读取文件、请求网络、处理图片、计算特征。

第三,你希望知道任务剩余时间。
比如跑批处理脚本、模型训练脚本、数据清洗脚本。

第四,你希望提升脚本的可读性和可观察性。
尤其是别人运行你的程序时,进度条比一片空白友好得多。

不过,如果循环很短,比如只运行几十毫秒,就没必要加 tqdm。进度条本身也会带来极小的额外开销,虽然通常可以忽略,但在极端高频、极短耗时的循环里,没必要强行使用。

七、一个小例子:批量处理文件

假设我们要处理一个文件夹下的所有 .txt 文件:

from pathlib import Path
from tqdm import tqdm

folder = Path("./data")
files = list(folder.glob("*.txt"))

for file in tqdm(files, desc="处理文本文件"):
    text = file.read_text(encoding="utf-8")
    # 在这里处理 text

如果文件数量很多,进度条就能清楚显示当前处理到了第几个文件。

这类场景在实际工作中非常常见:数据清洗、日志分析、文本处理、图片处理,基本都能用上。

八、tqdm 的价值不只是“好看”

很多人第一次见到 tqdm,会觉得它只是让终端多了一个进度条,好像只是视觉增强。

其实它解决的是一个更实际的问题:程序可观察性。

所谓可观察性,就是程序运行时,你能不能知道它在做什么、做到哪一步、速度是否正常、是否可能卡住。

没有 tqdm 时,长任务就像一个黑盒。
加上 tqdm 后,程序至少会告诉你:我还在跑,已经跑到这里了。

这对开发者调试代码、估算时间、发现性能瓶颈都很有帮助。

九、总结

tqdm 是一个小而实用的 Python 工具。

它不复杂,不需要大幅修改代码,也不要求你学习一套新的编程模式。很多时候,只要给原来的循环外面包一层 tqdm(),就能立刻获得一个清晰的进度条。

对于经常做数据处理、爬虫、批量文件操作、机器学习实验的 Python 用户来说,tqdm 几乎属于“装了不一定每天想起,但用到时非常顺手”的工具。下次当你的 Python 程序又开始沉默运行时,不妨给它加一行 tqdm。让程序跑得慢一点不可怕,可怕的是你不知道它到底跑到哪了。

最新文章

随机文章