程序运行过程中进度条显示特别重要,Python中使用
tqdm
库作为进度条操作工具,本文简要介绍tqdm
常用功能。
tqdm
源自阿拉伯语 taqaddum,意思是进程( “progress”); 也是西班牙语中 “I love you so much” (te quiero demasiado)的缩写(这个是碰了巧了)
tqdm(iterable)
任何可迭代的对象,使代码中的循环(loop)在运行过程中为用户展示进度条。from tqdm import tqdm
tqdm类的构造函数:
__init__(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, write_bytes=None, lock_args=None, nrows=None, colour=None, gui=False, **kwargs)
参数很复杂,这里介绍几个常用参数和方法,详细情况参考官网文档
tqdm
对象,如果手动更新进度条的话该参数可以为None
"it"
,即每个迭代,在下载或解压时,设为"B"
,代表每个“字节”。False
,如果设置为1
或者True
,会自动根据国际单位制进行转换 (kilo, mega, etc.) 。比如,在下载进度条的例子中,如果为False
,数据大小是按照字节显示,设为True
之后转换为Kb、Mb。tqdm()
直接包装在任意迭代器上:from tqdm import tqdm
for i in tqdm(range(10000)):
pass
>> 100%|██████████████████| 10000/10000 [00:00<00:00, 1248304.76it/s]
from tqdm import tqdm
for i in tqdm(range(10000), desc='test str:'):
pass
>> test str:: 100%|█████████████████| 10000/10000 [00:00<00:00, 1666257.75it/s]
trange(i)
是对tqdm(range(i))
特殊优化过的实例:from tqdm import trange
for i in trange(10000):
pass
>> 100%|██████████████████| 10000/10000 [00:00<00:00, 1191844.79it/s]
tqdm
对象,需要提前生成对象,并在循环中加以控制:使用外部对象可以直接建立对象,此时在循环之外需要关闭该对象:
from tqdm import tqdm
pbar = tqdm(range(10000))
for i in pbar:
pbar.set_description(str(i))
pass
pbar.close()
>> 9999: 100%|█████████████████████████| 10000/10000 [00:02<00:00, 4677.99it/s]
也可以使用
with
功能,在循环体之外由编译器自动结束其生命周期:
from tqdm import tqdm
with tqdm(range(10000)) as pbar:
for i in pbar:
pbar.set_description(str(i))
pass
>> 9999: 100%|█████████████████████████| 10000/10000 [00:02<00:00, 4659.45it/s]
tqdm
对象不需要迭代器作为初始化参数,但需要指定最大长度total
的值:from tqdm import tqdm
with tqdm(total=10000) as pbar:
for i in range(10000):
pbar.update(1)
>> 100%|████████████████████████████| 10000/10000 [00:00<00:00, 99888.16it/s]