Python进度条tqdm,你值得拥有

开发 后端
之所以了解到了这个,是因为使用了一个依赖tqdm的包,然后好奇就查了一下。对于python中的进度条也是经常使用的,例如包的安装,一些模型的训练也会通过进度条的方式体现在模型训练的进度。总之,使用进度条能够更加锦上添花,提升使用体验吧。至于更多tqdm内容可以参考tqdm官网[1]下面就来看看吧。

前言

之所以了解到了这个,是因为使用了一个依赖tqdm的包,然后好奇就查了一下。对于python中的进度条也是经常使用的,例如包的安装,一些模型的训练也会通过进度条的方式体现在模型训练的进度。总之,使用进度条能够更加锦上添花,提升使用体验吧。至于更多tqdm内容可以参考tqdm官网[1]下面就来看看吧。 

1 简单了解

先来看看效果,使用循环显示一个智能的进度条-只需用tqdm(iterable)包装任何可迭代就可完成,如下: 

 

Python进度条tqdm你值得拥有

 

 

tqdm运行

 

相关代码如下: 

import tqdm 
import time 
 
 
for i in tqdm.tqdm(range(1000)): 
    time.sleep(0.1) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

官方也给了一张图,来看看: 

Python进度条tqdm你值得拥有
run2

看起来还不错吧,现在我们详细地了解一下。

2 使用

安装就不用说了,使用pip install tqdm即可。tqdm主要有以下三种用法。

2.1 基于迭代器的(iterable-based)

使用案例如下,使用tqdm()传入任何可迭代的参数: 

from tqdm import tqdm 
from time import sleep 
 
 
text = "" 
for char in tqdm(["a""b""c""d"]): 
    sleep(0.25) 
    text = text + char 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

tqdm(range(i))的一个特殊优化案例: 

from time import sleep 
from tqdm import trange 
 
for i in trange(100): 
    sleep(0.01) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

这样就可以不同传入range(100)这样的迭代器了,trange()自己去构建。 除此之外,可以用tqdm()在循环外手动控制一个可迭代类型,如下: 

pbar = tqdm(["a""b""c""d"]) 
for char in pbar: 
    sleep(0.25) 
    pbar.set_description("Processing %s" % char
  • 1.
  • 2.
  • 3.
  • 4.

这里还使用了.set_description(),结果如下:

Processing d: 100%|██████████| 4/4 [00:01<00:00,  3.99it/s] 
  • 1.

相关参数容后再介绍。

2.2 手工操作(Manual)

使用with语句手动控制tqdm的更新,可以根据具体任务来更新进度条的进度。 

with tqdm(total=100) as pbar: 
    for i in range(10): 
        sleep(0.1) 
        pbar.update(10) 
  • 1.
  • 2.
  • 3.
  • 4.

当然with这个语句想必大家都知道(想想使用with打开文件就知道了),也可以不使用with进行,则有如下操作: 

pbar = tqdm(total=100) 
for i in range(10): 
    sleep(0.1) 
    pbar.update(10) 
pbar.close() 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

那么这个时候,就不要忘了在结束后关闭,或者del tqdm对象了。

2.3 模块(Module)

也许tqdm的最妙用法是在脚本中或在命令行中。只需在管道之间插入tqdm(或python -m tqdm),即可将所有stdin传递到stdout,同时将进度打印到stderr。具体如何操作,我们来看看,下面也是官方给出的例子。 以下示例演示了对当前目录中所有Python文件中的行数进行计数,其中包括计时信息。(为了能够在windows系统中使用linux命令,这是使用git打开),也是当前项目路径。

time find . -name '*.py' -type f -exec cat \{} \; | wc -l 
  • 1.

 

Python进度条tqdm你值得拥有

linux命令补充: time[2],find[3](-exec 使用其后参数操作查找到的文件);wc[4].

使用tqdm命令来试一试:

time find . -name '*.py' -type f -exec cat \{} \; | tqdm | wc -l 
  • 1.

则有: 

Python进度条tqdm你值得拥有

tqdm

注意,也可以指定tqdm的常规参数。如下: 

Python进度条tqdm你值得拥有

就暂时说到这吧,感觉内容有点超纲了,如果对tqdm有兴趣的话可以访问官方文档深入了解。

3 参数

官方的类初始化代码如下: 

class tqdm(): 
  ""
  Decorate an iterable object, returning an iterator which acts exactly 
  like the original iterable, but prints a dynamically updating 
  progressbar every time a value is requested. 
  ""
 
  def __init__(self, iterable=None, desc=None, total=None, leave=True
               file=None, ncols=None, mininterval=0.1, 
               maxinterval=10.0, miniters=None, ascii=None, disable=False
               unit='it', unit_scale=False, dynamic_ncols=False
               smoothing=0.3, bar_format=None, initial=0, position=None, 
               postfix=None, unit_divisor=1000): 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

官方对各个参数介绍如下: 

Parameters 
        ---------- 
        iterable  : iterable, optional 
            Iterable to decorate with a progressbar. 
            Leave blank to manually manage the updates. 
        desc  : str, optional 
            Prefix for the progressbar. 
        total  : int, optional 
            The number of expected iterations. If unspecified, 
            len(iterable) is used if possible. If float("inf"or as a last 
            resort, only basic progress statistics are displayed 
            (no ETA, no progressbar). 
            If `gui` is True and this parameter needs subsequent updating, 
            specify an initial arbitrary large positive integer
            e.g. int(9e9). 
        leave  : bool, optional 
            If [defaultTrue], keeps all traces of the progressbar 
            upon termination of iteration. 
        file  : `io.TextIOWrapper` or `io.StringIO`, optional 
            Specifies where to output the progress messages 
            (default: sys.stderr). Uses `file.write(str)` and `file.flush()` 
            methods.  For encoding, see `write_bytes`. 
        ncols  : int, optional 
            The width of the entire output message. If specified, 
            dynamically resizes the progressbar to stay within this bound. 
            If unspecified, attempts to use environment width. The 
            fallback is a meter width of 10 and no limit for the counter and 
            statistics. If 0, will not print any meter (only stats). 
        mininterval  : float, optional 
            Minimum progress display update interval [default: 0.1] seconds. 
        maxinterval  : float, optional 
            Maximum progress display update interval [default: 10] seconds. 
            Automatically adjusts `miniters` to correspond to `mininterval` 
            after long display update lag. Only works if `dynamic_miniters` 
            or monitor thread is enabled. 
        miniters  : int, optional 
            Minimum progress display update interval, in iterations. 
            If 0 and `dynamic_miniters`, will automatically adjust to equal 
            `mininterval` (more CPU efficient, good for tight loops). 
            If > 0, will skip display of specified number of iterations. 
            Tweak this and `mininterval` to get very efficient loops. 
            If your progress is erratic with both fast and slow iterations 
            (network, skipping items, etc) you should set miniters=1. 
        ascii  : bool or str, optional 
            If unspecified or False, use unicode (smooth blocks) to fill 
            the meter. The fallback is to use ASCII characters " 123456789#"
        disable  : bool, optional 
            Whether to disable the entire progressbar wrapper 
            [defaultFalse]. If set to None, disable on non-TTY. 
        unit  : str, optional 
            String that will be used to define the unit of each iteration 
            [default: it]. 
        unit_scale  : bool or int or float, optional 
            If 1 or True, the number of iterations will be reduced/scaled 
            automatically and a metric prefix following the 
            International System of Units standard will be added 
            (kilo, mega, etc.) [defaultFalse]. If any other non-zero 
            number, will scale `total` and `n`. 
        dynamic_ncols  : bool, optional 
            If set, constantly alters `ncols` to the environment (allowing 
            for window resizes) [defaultFalse]. 
        smoothing  : float, optional 
            Exponential moving average smoothing factor for speed estimates 
            (ignored in GUI mode). Ranges from 0 (average speed) to 1 
            (current/instantaneous speed) [default: 0.3]. 
        bar_format  : str, optional 
            Specify a custom bar string formatting. May impact performance. 
            [default'{l_bar}{bar}{r_bar}'], where 
            l_bar='{desc}: {percentage:3.0f}%|' and 
            r_bar='| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, ' 
              '{rate_fmt}{postfix}]' 
            Possible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt, 
              percentage, rate, rate_fmt, rate_noinv, rate_noinv_fmt, 
              rate_inv, rate_inv_fmt, elapsed, elapsed_s, remaining, 
              remaining_s, desc, postfix, unit. 
            Note that a trailing ": " is automatically removed after {desc
            if the latter is empty. 
        initial  : int, optional 
            The initial counter value. Useful when restarting a progress 
            bar [default: 0]. 
        position  : int, optional 
            Specify the line offset to print this bar (starting from 0) 
            Automatic if unspecified. 
            Useful to manage multiple bars at once (eg, from threads). 
        postfix  : dict or *, optional 
            Specify additional stats to display at the end of the bar. 
            Calls `set_postfix(**postfix)` if possible (dict). 
        unit_divisor  : float, optional 
            [default: 1000], ignored unless `unit_scale` is True
        write_bytes  : bool, optional 
            If (default: None) and `file` is unspecified, 
            bytes will be written in Python 2. If `True` will also write 
            bytes. In all other cases will default to unicode. 
        gui  : bool, optional 
            WARNING: internal parameter - do not use. 
            Use tqdm_gui(...) instead. If set, will attempt to use 
            matplotlib animations for a graphical output [defaultFalse]. 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.

更多功能则可根据以上参数发挥你的想象力了。

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2021-06-15 08:02:27

Python进度条Tqdm

2015-07-31 11:19:43

数字进度条源码

2024-08-06 14:29:37

2021-01-21 09:45:16

Python字符串代码

2023-12-27 13:45:00

Python进度条代码

2011-07-05 15:16:00

QT 进度条

2021-09-06 10:22:47

匿名对象编程

2022-04-04 21:33:48

进度条Python

2022-07-23 21:37:48

Python

2023-12-29 08:17:26

Python代码分析Profile

2009-06-06 18:54:02

JSP编程进度条

2023-12-11 17:15:05

应用开发波纹进度条ArkUI

2012-01-17 13:58:17

JavaSwing

2024-06-13 08:15:00

2022-02-04 21:33:34

Ajaxjs网站

2009-08-17 15:48:47

C# WinForm进

2009-08-17 14:41:47

C#进度条实现

2015-01-12 12:13:03

Android进度条ProgressDia

2009-12-25 17:58:12

WPF进度条

2009-08-18 09:49:00

C# listview
点赞
收藏

51CTO技术栈公众号