用 Python 写出这样的进度条,刷新了我对进度条的认知
点击上方Python知识圈,设为星标
回复1024获取Python资料
阅读文本大概需要 3 分钟
1 简介
在日常运行程序的过程中常常涉及到「循环迭代」过程,对于执行时间很短的程序来说倒无所谓,但对于运行过程有明显耗时的涉及「循环迭代」的程序,为其加上「进度条」(progress bar),是帮助我们监测代码执行进度以及处理中间异常错误非常实用的技巧。
![](https://filescdn.proginn.com/7a88f826334a963cb8b09e23db522677/09ae604693af54bd992ce07c05a88636.webp)
本文就将为大家介绍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
对其进行安装,安装完成后先来看看它最基本的用法:
![](https://filescdn.proginn.com/ad6c6515c6ffad928d207a55cbc7a5ca/c2cc5ad56ed55f7809f23d5c492f487c.webp)
利用tqdm.tqdm
,将for
循环过程中进行迭代的对象简单包裹,就实现了为循环过程添加进度条以及打印执行速度、已运行时间与预估剩余运行时间等实用信息的功能,同样也可用于「列表推导」:
![](https://filescdn.proginn.com/658c548e4eb3e106d509e921d0c2e803/983f0643a7c32d26d8eab1cd378f06f4.webp)
而针对迭代对象是range()
的情况,tqdm
还提供了简化版的trange()
来代替tqdm(range())
:
![](https://filescdn.proginn.com/c5452f3486efc9f22b28b8bcc22bf926/7d93a687bb8fa68526f5dfc028fa9bc6.webp)
其附带的参数desc
还可以帮助我们设置进度条的说明文字:
![](https://filescdn.proginn.com/a66437606fcfb9bfadfc4431f1d8ba2b/41a41ee37b9c897ac7c8ddeb9c88fe2e.webp)
而如果想要在迭代过程中变更说明文字,还可以预先实例化进度条对象,在需要刷新说明文字的时候执行相应的程序:
![](https://filescdn.proginn.com/97faf6a050240e9a2260192a3fb48214/23809fe2af8d5067246899d7855c57f1.webp)
但当迭代的对象长度一开始未知时,譬如对pandas
中的DataFrame.itertuples()
进行迭代,我们就只能对其执行速度等信息进行估计,但无法看到进度条递增情况,因为tqdm
不清楚迭代的终点如何:
![](https://filescdn.proginn.com/0536d10077c5b9ecc5689566d072b306/69f2dadb7e0548807e36a5ccb1dada04.webp)
2.2 配合jupyter notebook/jupyter lab的美观进度条
tqdm
对jupyter notebook
和jupyter lab
有着特殊的支持,且使用方法非常简单,只需要将原有的from tqdm import XXX
的相应功能导入格式修改为from tqdm.notebook import XXX
就可以了,以trange
为例:
![](https://filescdn.proginn.com/87a106d9b2c5cc6dfd199bc72b96111f/b1fe3227feaf5a0d892d28b1acace760.webp)
2.3 配合pandas中的apply
tqdm
对pandas
中的apply()
过程提供了特殊的支持,因为pandas
中的apply()
本质上就是串行循环运算,你可以将pandas
中的任何apply
操作替换为progress_apply
,并且记住每个单独的progress_apply
前要先执行tqdm.pandas()
,就像下面的例子一样:
![](https://filescdn.proginn.com/4033717e6e196732cfdd887702351888/06a3d1601bd0da16cc375318425f5d46.webp)
3 alive-progress常用方法
虽然与tqdm
一样都是为了给循环过程加上进度条而诞生的库,但alive-progress
相比tqdm
增加了更多花样繁多的动态效果,我们通过调用其专门提供的showtime()
函数可以查看所有可用的动态进度条样式:
![](https://filescdn.proginn.com/29d8661c2490c6622c191b9285ac3844/76ccb8ed57865f8befb79ed845985606.webp)
同样类似地可以查看所有进度条样式:
![](https://filescdn.proginn.com/5c2d2a7bb12326a7ec6ba86ab1b1afba/7b1557dbeb14a4074340f25495f0fc9f.webp)
使用起来也是非常简单,但与tqdm
用法区别很大,需要配合with
关键词,譬如下面我们使用到alive_progress
中的alive_bar
来生成动态进度条:
![](https://filescdn.proginn.com/a88563450c929ccee6ec0fb483c075de/7e5e093ebaa3580b8bfdd8a529bc99a8.webp)
通过修改bar
参数来改变进度条的样式:
![](https://filescdn.proginn.com/260d275f86a62a21769dcfb5c4fdc8ec/71690986d0ea6ac52bd737c0ebbe1a08.webp)
更多关于alive-progress
的内容感兴趣的朋友可以查看官方说明:(https://github.com/rsalmei/alive-progress),但比较遗憾的是目前的alive-progress
只能在终端中运行,还没有为jupyter
开发更美观的交互式部件,但你可以在譬如网络爬虫等任务中使用它,效果也是很不错的。
![](https://filescdn.proginn.com/f8694439f84832b6a37b52dbae9fb495/be20f141e501cc4490245c7ace835d58.webp)
----------------------- 公众号:Python知识圈 博客:www.pyzhishiquan.com 知乎:Python知识圈 微信视频号:菜鸟程序员 (分享有趣的编程技巧、Python技巧) bilibili:菜鸟程序员的日常(目前原创视频:18,累计播放量:70万) 一个学习Python的人,喜欢分享,喜欢搞事情!
长按下图二维码关注,和你一起领悟Python的魅力。
Python知识圈公众号的交流群已经建立,群里可以领取 Python 和人工智能学习资料,大家可以一起学习交流,效率更高,如果是想发推文、广告、砍价小程序的敬请绕道!一定记得备注「交流学习」,我会尽快通过好友申请哦!通过好友后私聊我「学习资料」或者「进群」都可以。
扫码添加,备注:交流学习
往期推荐 01 02 03
我就知道你“在看”