1 简介
在日常运行程序的过程中经常会涉及到 循环迭代 过程,对于运行过程有明显耗时的涉及 循环迭代 的程序,为其加上 进度条 ( progress bar ),是帮助我们监测代码执行进度以及处理中间异常错误非常实用的技巧,但对于执行时间很短的程序来说倒无所谓。
本文就将为大家介绍 Python 中非常实用又风格迥异的两个进度条相关库—— tqdm 与 alive-progress 的主要用法。
2 tqdm常用方法
tqdm 是 Python 中所有进度条相关库中最出名的,既然是最出名的,自然有它独到之处。
tqdm 不仅可以生成基础的可在终端中显示的进度条,还可以配合 jupyter notebook 和 jupyter lab 生成更加美观的网页 交互 部件形式的进度条,更是和 pandas 强强联手,为 pandas 中的一些操作提供专有的进度条功能。
下面我们来对 tqdm 的主要功能进行介绍。
2.1 基础用法
因为是第三方库,首先需要利用 pip install tqdm 或 conda install -c conda-forge tqdm 对其进行安装,安装完成后先来看看它最基本的用法:
利用 tqdm.tqdm ,将 for 循环过程中进行迭代的对象简单包裹,就实现了为循环过程添加进度条以及打印执行速度、已运行时间与预估剩余运行时间等实用信息的功能,同样也可用于 列表推导 :
而针对迭代对象是 range() 的情况, tqdm 还提供了简化版的 trange() 来代替 tqdm(range()) :
其附带的参数 desc 还可以帮助我们设置进度条的说明文字:
而如果想要在迭代过程中变更说明文字,还可以预先实例化进度条对象,在需要刷新说明文字的时候执行相应的程序:
但当迭代的对象长度一开始未知时,譬如对 pandas 中的 DataFrame.itertuples() 进行迭代,我们就只能对其执行速度等信息进行估计,但无法看到进度条递增情况,因为 tqdm 不清楚迭代的终点如何:
2.2 配合jupyter notebook/jupyter lab的美观进度条
tqdm 对 jupyter notebook 和 jupyter lab 有着特殊的支持,且使用方法非常简单,只需要将原有的 from tqdm import XXX 的相应功能导入格式修改为 from tqdm.notebook import XXX 就可以了,以 trange 为例:
2.3 配合pandas中的apply
tqdm 对 pandas 中的 apply() 过程提供了特殊的支持,因为 pandas 中的 apply() 本质上就是串行循环运算,你可以将 pandas 中的任何 apply 操作替换为 progress_apply ,并且记住每个单独的 progress_apply 前要先执行 tqdm.pandas() ,就像下面的例子一样:
3 alive-progress常用方法
虽然与 tqdm 一样都是为了给循环过程加上进度条而诞生的库,但 alive-progress 相比 tqdm增加了更多花样繁多的动态效果,我们通过调用其专门提供的 showtime() 函数可以查看所有可用的动态进度条样式:
同样类似地可以查看所有进度条样式:
使用起来也是非常简单,但与 tqdm 用法区别很大,需要配合 with 关键词,譬如下面我们使用到 alive_progress 中的 alive_bar 来生成动态进度条:
通过修改 bar 参数来改变进度条的样式: