本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

  在日常运行程序的过程中常常涉及到循环迭代过程,对于执行时间很短的程序来说倒无所谓,但对于运行过程有明显耗时的涉及循环迭代的程序,为其加上进度条progress bar),是帮助我们监测代码执行进度以及处理中间异常错误非常实用的技巧。

图1

  本文就将为大家介绍Python中非常实用又风格迥异的两个进度条相关库——tqdmalive-progress的主要用法。

2 tqdm常用方法

  tqdmPython中所有进度条相关库中最出名的,既然是最出名的,自然有它独到之处。

  tqdm不仅可以生成基础的可在终端中显示的进度条,还可以配合jupyter notebookjupyter lab生成更加美观的网页交互部件形式的进度条,更是和pandas强强联手,为pandas中的一些操作提供专有的进度条功能。

  下面我们来对tqdm的主要功能进行介绍。

2.1 基础用法

  因为是第三方库,首先需要利用pip install tqdmconda 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的美观进度条

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

图8

2.3 配合pandas中的apply

  tqdmpandas中的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开发更美观的交互式部件,但你可以在譬如网络爬虫等任务中使用它,效果也是很不错的。


  以上就是本文的全部内容,如有疑问欢迎在评论区与我讨论~

最新文章

  1. Windows的基本内容
  2. js如何使得新打开的窗口居中
  3. 安装Window Services 提示错误 [SC] OpenSCManager FAILED 5
  4. 解决javax.imageio.IIOException: Can't create output stream!
  5. HTML5音频,视频播放
  6. python(14)类,方法,对象,实例
  7. MVVM解决方案的一般结构
  8. IOS 7 开发范例 - UISwitch的使用
  9. phpcms v9 数据库分离部署
  10. T-SQL表联接查询
  11. 酷Q机器人,QQ机器人使用教程
  12. 基于Visual C++2013拆解世界五百强面试题--题15-递归相加
  13. 步步为营Hibernate全攻略(四)剪不断理还乱之:复合主键 && 组合映射
  14. lucas定理解决大组合数取模
  15. erlang程序优化点的总结(持续更新)
  16. Hadoop: failed on connection exception: java.net.ConnectException: Connection refuse
  17. Bootstrap--下拉菜单.dropdown
  18. jsp+struts2登录框架模板
  19. char (*p)[]和char *p[]的区别
  20. Ubuntu16.04开机引导缺失Win10

热门文章

  1. 洛谷 P3574 [POI2014]FAR-FarmCraft
  2. like's photos
  3. postman-5-授权
  4. day48 navicat使用及pymysql的使用
  5. 蕴含式(包含EXISTS语句的分析)
  6. classpath路径(转)
  7. Flask 基础组件(六):Session
  8. bzoj1742[Usaco2005 nov]Grazing on the Run 边跑边吃草*&&bzoj3074[Usaco2013 Mar]The Cow Run*
  9. typedef struct 指针结构体使用方法
  10. 理解js中的几种设计模式