Python 中的进度条

Manav Narula 2023年1月30日
  1. 在 Python 中使用 tdqm 模块创建进度条
  2. 使用 Python 中的 progressbar 模块创建进度条
  3. 在 Python 中创建自己的函数以创建进度条
Python 中的进度条

在编程领域,我们要处理大量的代码。一个程序可能会花费很多时间来编译和运行。因此,了解已经取得了多少进展以及该程序完成的预计时间是有一点帮助的。在这种情况下,我们可以在 Python 中使用进度条。而且,它们可以帮助我们确定程序是否在中间停止。

在 Python 中,我们有许多可用的库,它们可以帮助我们为程序创建一个简单的进度条来帮助我们。在本教程中,我们将逐一讨论每种方法。

在 Python 中使用 tdqm 模块创建进度条

tdqm 库具有用于创建基本进度条的快速有效的框架。它在终端机,python 笔记本电脑上运行良好,并且与 Windows,Linux 和 macOS 兼容。

在下面的代码中,我们使用此模块中的函数创建一个简单的进度条。

from time import sleep
from tqdm import tqdm

for i in tqdm(range(10)):
    sleep(0.2)

我们遍历一个循环,在每次迭代中,进度条也会增加。sleep() 函数用于将编译器暂停一些指定的秒数。请注意,默认情况下,该条显示剩余时间,每秒迭代次数和百分比。

在本教程讨论的所有模块中,此模块的开销最少。

使用 Python 中的 progressbar 模块创建进度条

progressbar 模块的功能几乎和 tdqm 模块一样。除此之外,它还有一些选项可以设置进度条的动画处理,并使用进度条上显示的组件。

以下代码显示了此示例。

import time
import progressbar

for i in progressbar.progressbar(range(100)):
    time.sleep(0.02)

progressbar2 在 Python 中也存在,并且是 progressbar 的分支。由于其强大的可自定义功能,它非常受欢迎。它还支持带有进度条的打印语句。不利的一面是,该模块已多年未维护。

请注意,还有更多的库可供使用,例如 alive-progressprogress,它们可以帮助制作进度条,但是这两个库是最常用的。它们之间的唯一区别是这些库提供的动画和其他自定义项。

在 Python 中创建自己的函数以创建进度条

我们还可以创建一个类似于进度条的简单函数。下面的代码实现了这一点。

import time
import sys


def progressbar(it, prefix="", size=60, file=sys.stdout):
    count = len(it)

    def show(j):
        x = int(size * j / count)
        file.write("%s[%s%s] %i/%i\r" % (prefix, "#" * x, "." * (size - x), j, count))
        file.flush()
        file.write("\n")

    show(0)
    for i, item in enumerate(it):
        yield item
        show(i + 1)
        file.write("\n")
    file.flush()


for i in progressbar(range(15), "Computing: ", 40):
    time.sleep(0.1)

输出:

Computing: [........................................] 0/15
Computing: [##......................................] 1/15
Computing: [#####...................................] 2/15
Computing: [########................................] 3/15
Computing: [##########..............................] 4/15
Computing: [#############...........................] 5/15
Computing: [################........................] 6/15
Computing: [##################......................] 7/15
Computing: [#####################...................] 8/15
Computing: [########################................] 9/15
Computing: [##########################..............] 10/15
Computing: [#############################...........] 11/15
Computing: [################################........] 12/15
Computing: [##################################......] 13/15
Computing: [#####################################...] 14/15
Computing: [########################################] 15/15

我们计算所需的总迭代次数,在每次迭代中,我们增加 # 符号并进行打印。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn