IDC

Python进度条tqdm,你值得拥有

作者:admin 2021-09-07 我要评论

前言 之所以了解到了这个,是因为使用了一个依赖tqdm的包,然后好奇就查了一下。对于python中的进度条也是经常使用的,例如包的安装,一些模型的训练也会通过进...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

前言

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

1 简单了解

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

Python进度条tqdm你值得拥有
tqdm运行

相关代码如下:

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

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

Python进度条tqdm你值得拥有
run2

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

2 使用

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

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

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

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

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

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

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

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

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

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

相关参数容后再介绍。

2.2 手工操作(Manual)

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

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

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

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

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

2.3 模块(Module)

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

  1. time find . -name '*.py' -type f -exec cat \{} \; | wc -l 
Python进度条tqdm你值得拥有

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

使用tqdm命令来试一试:

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

则有:

Python进度条tqdm你值得拥有

tqdm

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

Python进度条tqdm你值得拥有

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

3 参数

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

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

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

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

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

【责任编辑:未丽燕 TEL:(010)68476606】
本文转载自网络,原文链接:https://www.toutiao.com/a6905318271189352974/

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Python进度条tqdm,你值得拥有

    Python进度条tqdm,你值得拥有

  • 开发岗面试必问:3个超难的案例分析回

    开发岗面试必问:3个超难的案例分析回

  • Node.js 服务性能翻倍的秘密(一)

    Node.js 服务性能翻倍的秘密(一)

  • Python-Wechaty: 面向IM软件的聊天机器

    Python-Wechaty: 面向IM软件的聊天机器