Python 进度条:tqdm 和 alive-progress 库

章绪
2023-12-01

2021-11-30 测试通过
非原创,原文来自知乎用户【Python与数据挖掘】,转载备忘
原文链接:https://zhuanlan.zhihu.com/p/403641309

1. 简介

  • tqdm:可在终端应用程序中使用,也可以配合 Jupyter Notebook 或 Jupyter Lab 使用,更为 Pandas 提供了支持。
  • alive-progress:进度条花样繁多,但目前只能在终端应用中使用。

2. tqdm 常用方法

2.1 安装

pip install tqdm

conda install -c conda-forge tqdm

Jupyter Notebook 记得加感叹号。

2.2 基础用法

from tqdm import tqdm
import time

for i in tqdm(range(20)):
    time.sleep(0.2)

也可以直接应用于列表推导:

temp = [time.sleep(0.2) for i in tqdm(range(10))]

利用 tqdm.tqdm,将 for 循环过程中进行迭代的对象简单包裹,就实现了为循环过程添加进度条以及打印执行速度、已运行时间与预估剩余运行时间等实用信息的功能。

针对迭代对象是 range() 的情况,tqdm 还提供了简化版的 trange() 来代替 tqdm(range())

from tqdm import trange

for i in trange(10):
    time.sleep(0.2)

其附带的参数 desc 还可以帮助我们设置进度条的说明文字:

for i in tqdm(range(10), desc='Countdown Status:'):
    time.sleep(0.2)

而如果想要在迭代过程中变更说明文字,还可以预先实例化进度条对象,在需要刷新说明文字的时候执行相应的程序:

counter = tqdm(range(10), desc='First description:')

for i in counter:
    time.sleep(0.2)
    if i==5 :
        counter.desc='Second description'

但当迭代的对象长度一开始未知时,譬如对 pandas 中的 DataFrame.itertuples() 进行迭代,我们就只能对其执行速度等信息进行估计,但无法看到进度条递增情况,因为 tqdm 不清楚迭代的终点如何:

import pandas as pd

df = pd.DataFrame({'a':range(10)})

for row in tqdm(df.itertuples()):
    time.sleep(0.2)

2.3 配合 jupyter notebook/jupyter lab 的美观进度条

tqdm 对 jupyter notebook 和 jupyter lab 有着特殊的支持,且使用方法非常简单,只需要将原有的 from tqdm import XXX 的相应功能导入格式修改为 from tqdm.notebook import XXX 就可以了,以 trange 为例:

from tqdm.notebook import trange

for i in trange(10):
    time.sleep(0.2)

2.4 配合 pandas 中的 apply

tqdm 对 pandas 中的 apply() 过程提供了特殊的支持,因为 pandas 中的 apply() 本质上就是串行循环运算,你可以将 pandas 中的任何 apply 操作替换为 progress_apply,并且记住每个单独的 progress_apply 前要先执行 tqdm.pandas(),就像下面的例子一样:

from tqdm.notebook import tqdm

tqdm.pandas(desc='for pandas apply:')
_ = df.progress_apply(lambda _: time.sleep(0.2), axis=1)

3. alive-progress 常用方法

通过调用 alive-progress 专门提供的 showtime() 函数可以查看所有可用的动态进度条样式:
alive-progress 貌似更新了,改天再记。
pypi 地址:alive-progress

 类似资料: