Python tqdm 模块 | 如何创建终端进度条

17 Mar 2025 | 6 分钟阅读

每当我们安装任何 Python 库、模块或安装软件时,我们都会在屏幕上看到进度条,它显示了一个小进度条,估算了过程需要多长时间才能完成或渲染。它让我们对活动有一个印象,并且可以平静我们的神经。我们都熟悉各种进度条。有些很吸引人,有些很无聊。

在本文中,我们将不使用 Python 的代码核心日志库来创建进度条。

进度条根据完成任务所取得进度的百分比填充。进度可以通过将**已处理的项目数**除以**总输入项**来计算。各种因素会影响进度条,例如网络速度、延迟以及是否将数据持久化到本地存储以得出更准确的 ETA(预计到达时间)。

我们可以使用名为 **tqdm** 的 Python 外部库创建简单无忧的进度条。我们可以将其添加到代码中,使其看起来很棒。

tqdm 在阿拉伯语中意为“taqadum”,意为“进步”。Python tqdm 模块可在 Linux、Windows、Mac 等各种平台上运行,并且与 IPython/Jupyter 笔记本兼容。

需要进度条

如果我们处理的是小型数据集,进度不会影响我们的工作流程。但是,进度条可用于迭代数据集、训练模型或编码大型信息集。

  • 进度条提供了一个对已给定可能需要更多时间的估计的进程的估计。
  • 它告诉我们该进程仍在运行,并没有被粗暴地终止。

前提条件

系统中必须安装 Python 3,我们还可以创建一个虚拟环境来安装 tqdm 库。

安装

打开命令行终端并键入以下内容。

上面的命令将成功安装在系统中。我们可以使用以下语句进行验证。

如果没有错误,则表示该库已成功安装。

将进度条添加到 for 循环

程序

输出

outer loop:   0%|          | 0/10 [00:00<?, ?it/s]
inner loop:   0%|          | 0.00/100 [00:00<?, ?it/s]
inner loop:   1%|          | 1.00/100 [00:01<01:40, 1.02s/it]
inner loop:   2%|▏         | 2.00/100 [00:02<01:39, 1.02s/it]
inner loop:   3%|▎         | 3.00/100 [00:03<01:38, 1.01s/it]
inner loop:   4%|▍         | 4.00/100 [00:04<01:37, 1.01s/it]
inner loop:   5%|▌         | 5.00/100 [00:05<01:35, 1.01s/it]
inner loop:   6%|▌         | 6.00/100 [00:06<01:34, 1.01s/it]
inner loop:   7%|▋         | 7.00/100 [00:07<01:34, 1.01s/it]
inner loop:   8%|▊         | 8.00/100 [00:08<01:33, 1.02s/it]
inner loop:   9%|▉         | 9.00/100 [00:09<01:32, 1.02s/it]
inner loop:  10%|█         | 10.0/100 [00:10<01:31, 1.02s/it]
inner loop:  11%|█         | 11.0/100 [00:11<01:30, 1.01s/it]
inner loop:  12%|█▏        | 12.0/100 [00:12<01:29, 1.01s/it]
inner loop:  13%|█▎        | 13.0/100 [00:13<01:28, 1.01s/it]
inner loop:  14%|█▍        | 14.0/100 [00:14<01:29, 1.04s/it]
inner loop:  15%|█▌        | 15.0/100 [00:15<01:27, 1.03s/it]
inner loop:  16%|█▌        | 16.0/100 [00:16<01:26, 1.02s/it]
inner loop:  17%|█▋        | 17.0/100 [00:17<01:24, 1.02s/it]
inner loop:  18%|█▊        | 18.0/100 [00:18<01:23, 1.02s/it]
inner loop:  19%|█▉        | 19.0/100 [00:19<01:22, 1.02s/it]
…………………………………………………………………………………………….
……………………………………………………………………………………………..
It will go till it reached at 100%.

让我们来看另一个例子。

示例 - 1

输出

loop : 100%|██████████| 10/10 [00:01<00:00, 9.08it/s]

示例 -

输出

outer loop:   0%|          | 0/10 [00:00<?, ?it/s]
inner loop:   0%|          | 0.00/100 [00:00<?, ?it/s]
inner loop:   1%|          | 1.00/100 [00:01<01:39, 1.00s/it]
inner loop:   2%|▏         | 2.00/100 [00:02<01:38, 1.00s/it]
inner loop:   3%|▎         | 3.00/100 [00:03<01:37, 1.00s/it]
inner loop:   4%|▍         | 4.00/100 [00:04<01:36, 1.00s/it]
inner loop:   5%|▌         | 5.00/100 [00:05<01:35, 1.00s/it]
inner loop:   6%|▌         | 6.00/100 [00:06<01:34, 1.01s/it]
inner loop:   7%|▋         | 7.00/100 [00:07<01:33, 1.01s/it]
inner loop:   8%|▊         | 8.00/100 [00:08<01:32, 1.01s/it]
inner loop:   9%|▉         | 9.00/100 [00:09<01:31, 1.00s/it]
inner loop:  10%|█         | 10.0/100 [00:10<01:30, 1.01s/it]

示例 -3

输出

Outer loop:   0%|          | 0/3 [00:00<?, ?it/s]
Inner loop:   0%|          | 0/5 [00:00<?, ?it/s]
Inner loop:  20%|██        | 1/5 [00:00<00:00,  4.62it/s]
Inner loop:  40%|████      | 2/5 [00:00<00:00,  4.64it/s]
Inner loop:  60%|██████    | 3/5 [00:00<00:00,  4.63it/s]
Inner loop:  80%|████████  | 4/5 [00:00<00:00,  4.65it/s]
Outer loop:  33%|███▎      | 1/3 [00:01<00:03,  1.58s/it]
Inner loop:   0%|          | 0/5 [00:00<?, ?it/s]
Inner loop:  20%|██        | 1/5 [00:00<00:00,  4.91it/s]
Inner loop:  40%|████      | 2/5 [00:00<00:00,  4.85it/s]
Inner loop:  60%|██████    | 3/5 [00:00<00:00,  4.79it/s]
Inner loop:  80%|████████  | 4/5 [00:00<00:00,  4.77it/s]
Outer loop:  67%|██████▋   | 2/3 [00:03<00:01,  1.58s/it]
Inner loop:   0%|          | 0/5 [00:00<?, ?it/s]
Inner loop:  20%|██        | 1/5 [00:00<00:00,  4.43it/s]
Inner loop:  40%|████      | 2/5 [00:00<00:00,  4.56it/s]
Inner loop:  60%|██████    | 3/5 [00:00<00:00,  4.65it/s]
Inner loop:  80%|████████  | 4/5 [00:00<00:00,  4.72it/s]
Outer loop: 100%|██████████| 3/3 [00:04<00:00,  1.57s/it]

预测性手动更新进度条

tqdm 模块提供了一种在特定间隔手动更新进度条的机制。当我们分块下载多部分文件或流式传输数据时,我们可以手动更新进度条函数。让我们通过以下示例来理解。

示例 -

输出

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

解释 -

在上面的代码中,我们将属性设置为 100。调用的函数在每次迭代中增加十,直到达到 100%。我们可以向 `update()` 方法传递任何值。

线程进度条

我们还可以将 Python tqdm 包集成到 Python 线程中。多进程是利用核心总数以最有效的方式。tqdm 的 `position` 参数允许我们指定打印此进度条的行偏移量。在非脚本化的情况下,它默认设置为自动。让我们通过以下示例来理解。必须指定该值才能同时管理多个进度条。如果我们忽略此参数,我们的进度条将被不同线程覆盖。

示例 -

输出

progressbar #5:   0%|          | 0/100 [00:00<?, ?it/s]
progressbar #2:   0%|          | 0/100 [00:00<?, ?it/s]
progressbar #1:   0%|          | 0/100 [00:00<?, ?it/s]
progressbar #4:   0%|          | 0/100 [00:00<?, ?it/s]
progressbar #3:   0%|          | 0/100 [00:00<?, ?it/s]
progressbar #3:  10%|█         | 10/100 [00:01<00:09,  9.91it/s]
progressbar #5:  10%|█         | 10/100 [00:01<00:09,  9.91it/s]
progressbar #1:  10%|█         | 10/100 [00:02<00:18,  4.97it/s]
progressbar #2:  10%|█         | 10/100 [00:02<00:18,  4.96it/s]
progressbar #4:  10%|█         | 10/100 [00:02<00:18,  4.96it/s]
progressbar #5:  15%|█▌        | 15/100 [00:02<00:11,  7.64it/s]
progressbar #3:  15%|█▌        | 15/100 [00:02<00:11,  7.64it/s]
progressbar #4:  15%|█▌        | 15/100 [00:03<00:17,  4.96it/s]
progressbar #2:  15%|█▌        | 15/100 [00:03<00:17,  4.95it/s]
progressbar #3:  20%|██        | 20/100 [00:04<00:16,  4.71it/s]
progressbar #5:  25%|██▌       | 25/100 [00:04<00:11,  6.58it/s]
progressbar #1:  20%|██        | 20/100 [00:04<00:16,  4.97it/s]
progressbar #2:  20%|██        | 20/100 [00:04<00:16,  4.96it/s]

为 Tqdm 进度条添加颜色

颜色可以使进度条非常吸引人。但是,它不会为进度条的工作添加任何新功能。tqdm 可以与 Colorama 配合使用,Colorama 是 Python 中一个简单的跨平台彩色终端文本库。让我们通过以下示例来理解。

示例 -

输出

Python tqdm Module

结论

我们已经讨论了与进度条相关的所有基本概念。Python 带有 tqdm 模块,可帮助我们手动进行设计。我们为可以在 tqdm 模块中执行的重要操作提供了合适的示例。tqdm 模块可以与子进程和线程协作,在那里我们可以同时运行多个进程条。