本文作者:HelloGitHub-Anthony
HelloGitHub 推出的《讲解开源项目》系列,本期介绍让你快速拥有完美进度条的 Python 三方库——alive-progress,
项目地址:https://github.com/rsalmei/alive-progress
不知你是否有过这样的经历:你写了一个程序,每次运行都会耗费很长时间。在等待程序运行期间你一次次的按下回车防止程序卡死。亦或者你的任务需要实时掌握程序运行进度但你根本不知道程序执行到了哪里...
现在,alive-progress 来了,它是一个 Python 下的进度条库,不仅使用方便而且支持多种炫酷显示效果!让我们先来看看示例效果:
下面让我们一起玩转这个库!
一、安装在 Python 下使用 pip 进行安装:
pip install alive-progress 二、快速入门 2.1 直接使用在循环中使用 alive-progress 是最常见的用法,脚本可以这样写:
# 导入 alive-progress 库 from alive_progress import alive_bar import time # 使用 with 语句创建一个进度条 with alive_bar(100) as bar: # 给 alive_bar 传入进度条总数目(这里是 100) for item in range(100): # 等待 1s time.sleep(.1) #更新进度条,进度 +1 bar()请注意,如果无法正常显示动画则尝试在 alive_bar 中加上 force_tty=True 参数。
运行以上代码我们可以看到在终端中出现了一个还算华丽的动态进度条:
需要注意的是 alive-progress 并不像 tqdm 等进度条库一样会自动更新,只有我们程序调用了 bar 才会让进度条 +1.
当然,我们也可以不给进度条传入总数目这个参数,此时进度条将不显示进度,并进入未定义模式:
有时候我们想直接操纵显示的位置,这时候可以设定 alive_bar 的 manual 参数为 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)当然,在运行过程中我们也需要输出一些提示信息,直接使用 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) # 输出一行信息 2.2 添点花样看多了传统的进度条样式想换换花样?没问题,alive-progress 不仅内置了多种进度条样式,还支持自定义格式。
进度条可以自定义的样式分为两种:bar 和 spinner,只需要在调用 alive_bar 的时候传入对应的参数即可。
以这个进度条为例,中间最长的是 bar,旁边来回晃动的 是 spinner。
alive-progress 内置了多种 bar 和 spinner 样式,只需要调用 show_bars 或者 show_spinners 即可快速预览相应的样式,例如:
from alive_progress import show_bars show_bars() # 查看内置 bar 样式