如何在Python中妥善使用进度条详解


Posted in Python onApril 05, 2022

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对其进行安装,安装完成后先来看看它最基本的用法:

如何在Python中妥善使用进度条详解

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

如何在Python中妥善使用进度条详解

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

如何在Python中妥善使用进度条详解

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

如何在Python中妥善使用进度条详解

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

如何在Python中妥善使用进度条详解

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

如何在Python中妥善使用进度条详解

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

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

如何在Python中妥善使用进度条详解

2.3 配合pandas中的apply

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

如何在Python中妥善使用进度条详解

3 alive-progress常用方法

虽然与tqdm一样都是为了给循环过程加上进度条而诞生的库,但alive-progress相比tqdm增加了更多花样繁多的动态效果,我们通过调用其专门提供的showtime()函数可以查看所有可用的动态进度条样式:

如何在Python中妥善使用进度条详解

同样类似地可以查看所有进度条样式:

如何在Python中妥善使用进度条详解

使用起来也是非常简单,但与tqdm用法区别很大,需要配合with关键词,譬如下面我们使用到alive_progress中的alive_bar来生成动态进度条:

如何在Python中妥善使用进度条详解

通过修改bar参数来改变进度条的样式:

如何在Python中妥善使用进度条详解

更多关于alive-progress的内容感兴趣的朋友可以查看官方说明:(https://github.com/rsalmei/alive-progress ),但比较遗憾的是目前的alive-progress只能在终端中运行,还没有为jupyter开发更美观的交互式部件,但你可以在譬如网络爬虫等任务中使用它,效果也是很不错的。

总结

到此这篇关于如何在Python中妥善使用进度条的文章就介绍到这了,更多相关Python使用进度条内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的yield浅析
Jun 16 Python
浅谈Python中数据解析
May 05 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
python基础学习之如何对元组各个元素进行命名详解
Jul 12 Python
Random 在 Python 中的使用方法
Aug 09 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
python安装后的目录在哪里
Jun 21 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 11 Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
You might like
paypal即时到账php实现代码
2010/11/28 PHP
PHP的5个安全措施小结
2012/07/17 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
php显示时间常用方法小结
2015/06/05 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
python实现聊天小程序
2018/03/13 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python正则表达式指南 推荐
2018/10/09 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
python默认参数调用方法解析
2020/02/09 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
python 检测图片是否有马赛克
2020/12/01 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
单位消防安全责任书
2014/07/23 职场文书
工作证明英文模板
2014/10/21 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
工程款催款函
2015/06/24 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python