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

作者:费弗里 时间:2022-05-30 12:10:05 

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中妥善使用进度条详解

来源:https://www.cnblogs.com/feffery/p/13392024.html

标签:python,进度条
0
投稿

猜你喜欢

  • Python编程语言的35个与众不同之处(语言特征和使用技巧)

    2023-11-21 23:09:25
  • 下一代web:浏览器存储支持

    2008-06-11 11:50:00
  • 析构函数与php的垃圾回收机制详解

    2023-11-14 11:27:34
  • oracle行转列方法集合汇总(推荐!)

    2024-01-12 19:42:14
  • Python自定义sorted排序实现方法详解

    2022-08-03 05:40:02
  • SQLserver中字符串查找功能patindex和charindex的区别

    2012-06-06 20:20:42
  • 使用Python编写简单的画图板程序的示例教程

    2022-04-28 03:22:15
  • Swoole webSocket消息服务系统代码设计详解

    2023-06-09 01:05:28
  • pandas删除某行或某列数据的实现示例

    2021-01-05 07:24:33
  • python实现从本地摄像头和网络摄像头截取图片功能

    2022-04-22 22:32:39
  • uniapp实现微信H5扫码功能的完整步骤

    2024-04-10 16:21:04
  • JavaScript实现九宫格抽奖

    2024-04-16 09:32:06
  • Pygame实战练习之一百层游戏

    2022-01-08 00:07:54
  • Oracle10g 安装方法

    2009-06-19 17:50:00
  • Python连接es之es更新操作示例详解

    2022-11-21 06:11:48
  • mysql中limit查询踩坑实战记录

    2024-01-16 13:38:45
  • 在Django框架中自定义模板过滤器的方法

    2021-02-11 20:14:49
  • 一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系

    2022-06-27 14:21:53
  • sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)

    2024-01-18 20:38:14
  • ASP分页类(支持多风格变换)

    2011-04-08 10:39:00
  • asp之家 网络编程 m.aspxhome.com