用 Python 写出这样的进度条,刷新了我对进度条的认知
❞
1 简介
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789
在日常运行程序的过程中常常涉及到「循环迭代」过程,对于执行时间很短的程序来说倒无所谓,但对于运行过程有明显耗时的涉及「循环迭代」的程序,为其加上「进度条」(progress bar),是帮助我们监测代码执行进度以及处理中间异常错误非常实用的技巧。
图1
本文就将为大家介绍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
对其进行安装,安装完成后先来看看它最基本的用法:
图2
利用tqdm.tqdm
,将for
循环过程中进行迭代的对象简单包裹,就实现了为循环过程添加进度条以及打印执行速度、已运行时间与预估剩余运行时间等实用信息的功能,同样也可用于「列表推导」:
图3
而针对迭代对象是range()
的情况,tqdm
还提供了简化版的trange()
来代替tqdm(range())
:
图4
其附带的参数desc
还可以帮助我们设置进度条的说明文字:
图5
而如果想要在迭代过程中变更说明文字,还可以预先实例化进度条对象,在需要刷新说明文字的时候执行相应的程序:
图6
但当迭代的对象长度一开始未知时,譬如对pandas
中的DataFrame.itertuples()
进行迭代,我们就只能对其执行速度等信息进行估计,但无法看到进度条递增情况,因为tqdm
不清楚迭代的终点如何:
图7
2.2 配合jupyter notebook/jupyter lab的美观进度条
tqdm
对jupyter notebook
和jupyter lab
有着特殊的支持,且使用方法非常简单,只需要将原有的from tqdm import XXX
的相应功能导入格式修改为from tqdm.notebook import XXX
就可以了,以trange
为例:
图8
2.3 配合pandas中的apply
tqdm
对pandas
中的apply()
过程提供了特殊的支持,因为pandas
中的apply()
本质上就是串行循环运算,你可以将pandas
中的任何apply
操作替换为progress_apply
,并且记住每个单独的progress_apply
前要先执行tqdm.pandas()
,就像下面的例子一样:
图9
3 alive-progress常用方法
虽然与tqdm
一样都是为了给循环过程加上进度条而诞生的库,但alive-progress
相比tqdm
增加了更多花样繁多的动态效果,我们通过调用其专门提供的showtime()
函数可以查看所有可用的动态进度条样式:
图10
同样类似地可以查看所有进度条样式:
图11
使用起来也是非常简单,但与tqdm
用法区别很大,需要配合with
关键词,譬如下面我们使用到alive_progress
中的alive_bar
来生成动态进度条:
图12
通过修改bar
参数来改变进度条的样式:
图13
更多关于alive-progress
的内容感兴趣的朋友可以查看官方说明:(https://github.com/rsalmei/alive-progress),但比较遗憾的是目前的alive-progress
只能在终端中运行,还没有为jupyter
开发更美观的交互式部件,但你可以在譬如网络爬虫等任务中使用它,效果也是很不错的。
用 Python 写出这样的进度条,刷新了我对进度条的认知的更多相关文章
- Python写出LSTM-RNN的代码
0. 前言 本文翻译自博客: iamtrask.github.io ,这次翻译已经获得trask本人的同意与支持,在此特别感谢trask.本文属于作者一边学习一边翻译的作品,所以在用词.理论方面难免会 ...
- (转)Python新手写出漂亮的爬虫代码2——从json获取信息
https://blog.csdn.net/weixin_36604953/article/details/78592943 Python新手写出漂亮的爬虫代码2——从json获取信息好久没有写关于爬 ...
- (转)Python新手写出漂亮的爬虫代码1——从html获取信息
https://blog.csdn.net/weixin_36604953/article/details/78156605 Python新手写出漂亮的爬虫代码1初到大数据学习圈子的同学可能对爬虫都有 ...
- NASA关于如何写出安全代码的10条军规
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:NASA关于如何写出安全代码的10条军规.
- 将基因组数据分类并写出文件,python,awk,R data.table速度PK
由于基因组数据过大,想进一步用R语言处理担心系统内存不够,因此想着将文件按染色体拆分,发现python,awk,R 语言都能够非常简单快捷的实现,那么速度是否有差距呢,因此在跑几个50G的大文件之前, ...
- 让你用sublime写出最完美的python代码--windows环境
至少很长一段时间内,我个人用的一直是pycharm,也感觉挺好用的,也没啥大毛病 但是pycharm确实有点笨重,啥功能都有,但是有很多可能这辈子我也不会用到,并且pycharm打开的速度确实不敢恭维 ...
- 深入理解 GIL:如何写出高性能及线程安全的 Python 代码
深入理解 GIL:如何写出高性能及线程安全的 Python 代码 本文由 伯乐在线 - 郑芸 翻译.未经许可,禁止转载!英文出处:A. Jesse.欢迎加入翻译组. GIL对多线程的影响:http:/ ...
- [置顶]
如何用PYTHON代码写出音乐
如何用PYTHON代码写出音乐 什么是MIDI 博主本人虽然五音不全,而且唱歌还很难听,但是还是非常喜欢听歌的.我一直在做这样的尝试,就是通过人工智能算法实现机器自动的作词和编曲(在这里预告下,通过深 ...
- 如何写出优雅的Python代码?
有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写.其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一 ...
随机推荐
- hacknos靶机实战
工具: kali 192.168.1.6 nmap 打开使用nmap -sP 192.168.1.0/24 扫描活跃的主机 发现目标ip 使用nmap 查看开启了什么服务Nmap -v -A -PN ...
- python面试题四:Python web框架
1 django.flask.tornado框架的比较? 2 什么是wsgi? WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口.具体的来说, ...
- java 基本语法(四) 流程控制(一) 分支结构
if(条件表达式){ 执行表达式} 结构二:二选一if(条件表达式){ 执行表达式1}else{ 执行表达式2} 结构三:n选一if(条件表达式){ 执行表达式1}else if(条件表达式){ 执行 ...
- dataframe一次小实验
老师搞不清,一个ndarray[df['columns']==a],返回的是什么,目前看来应该是df[] == a 的索引
- vue axios接口封装、Promise封装、简单的axios方法封装、vue接口方法封装、vue post、get、patch、put方法封装
相信大家在做前后端数据交互的时候都会给请求做一些简单的封装就像之前封装ajax方法一样axios的封装也是一样的简单下面这个就是封装的axios的方法,require.js import axios ...
- 2020软件测试自学全套教程-基于python自动化软件测试-2020新版软件测试中级程序员学习路线
不知不觉间,在软件测试行业野蛮的折腾了七年之久.七年之痒也即将过去,但我还是热爱着软件测试这一份工作,一路坚持,走到现在.经历过各种难题,有过迷茫,有过焦虑失眠.也踩过无数的坑,深知行业的不易.自从9 ...
- SpringBoot 接收前端参数的几种方式
昨天和前端小伙伴在联调是碰到了参数接收不到的错误,我在postman上测试接口是正常的,但是与前端对接时就接受不到参数,请求方式都是get,但是问题就在于json 和 form-data 的区别!这 ...
- 资深CIO介绍如何选型OA系统的?
OA办公系统成为企业管理的标配软件,在于可有效加强组织管理能力,提高员工协同效率,助力企业科学决策,合理分配企业资源,提升企业综合实力与市场竞争力.企业OA选型的经验总结来说也就是品牌.技术.产品.服 ...
- Spring-Boot 多数据源配置+动态数据源切换+多数据源事物配置实现主从数据库存储分离
一.基础介绍 多数据源字面意思,比如说二个数据库,甚至不同类型的数据库.在用SpringBoot开发项目时,随着业务量的扩大,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源. ...
- ant design pro : 依赖项 webpack-theme-color-replacer 最新版导致项目无法启动?
重新装了一个项目的依赖,结果发现打不开了? 报错如下: This dependency was not found: * webpack-theme-color-replacer/client in ...