每日一包 - alive-progress

978 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

介绍

当你运行一个耗时较长的程序时,发现等待了很长时间突然中断了,具体处理到哪里、完成度如何,却不得而知。可能会有人想到用进度条工具tqdm,这是一个比较常用也非常经典的进度条工具包,本文介绍的是另外一个进度条工具包alive-progress,有更加漂亮的动画,还可以显示实时进度、预计完成时间等功能,能够让程序的执行过程更加清晰。

首先我们可以看一下具体的动画效果:

img

安装和使用

安装

pip install alive-progress

使用

在循环中使用alive-progress是最常见的用法,该模块并不想tqdm等进度条库一样会自动更新,只有调用了bar()才会让进度条+1.

如下代码示例:

from alive_progress import alive_bar
import time
​
# 使用 with 语句创建一个进度条
# 给 alive_bar 传入进度条总数目(这里是 100)
with alive_bar(100, force_tty=True) as bar:
    for item in range(100):
        # 等待 1s
        time.sleep(0.1)
        bar()  # 更新进度条,进度 +1
        

运行上述代码可以看到如下效果:

img

当然也可以不给进度条传入总数目这个参数,此时进度条将不显示进度,进入未定义模式:

from alive_progress import alive_bar
import time
​
# 使用 with 语句创建一个进度条
# 给 alive_bar 传入进度条总数目(这里是 100)
with alive_bar(force_tty=True) as bar:  # 不指定总数目
    for item in range(100):
        # 等待 1s
        time.sleep(0.1)
        bar()  # 更新进度条,进度 +1

执行效果图如下:

img

如果想要直接操作进度条显示的位置,可以给alive_barmanual的参数设置成True

from alive_progress import alive_bar
import time
​
total = 100
with alive_bar(total, manual=True) as bar: # total 可以不指定,这时候只有百分比
    bar(0.5) # 进度到 50%
    time.sleep(0.5)
    bar(0.1) # 进度到 10% 
    time.sleep(0.5)
    bar(0.75) # 进度到 75%
    time.sleep(0.5)
    bar(1.0) # 进度到 100%
    time.sleep(0.5)
    bar(10) # 进度到 1000%
    for i in range(1,101):
        bar(i/100) # 设定进度为 i%
        time.sleep(0.05)

执行效果如下:

img

当然,在运行过程中我们也需要输出一些提示信息,直接使用 print 可以在不破坏进度条的情况下输出一行提示信息,text 方法则可以在进度条尾部添加后缀字符,而 title 参数则可以给进度条添加标题(前缀信息),具体使用方法及效果如下:

from alive_progress import alive_bar
import time
​
# 定义标题(前缀字符)为 HelloGitHub
with alive_bar(10, title="HelloGitHub") as bar:
    for i in range(10):
        time.sleep(1)
​
        bar()   # 让进度 +1
        bar.text("Processing Work #%d"%(i+1))   # 更新进度条后缀
​
        print("Work #%d finished"%i)        # 输出一行信息

执行效果如下所示:

img

总结

上述文章介绍了alive-progress模块的基本用法,其实我们还可以修改进度条的样式甚至可以自定义进度条,本文就为大家介绍一下基本用法,更多高级的用法可以参考官方文档

\