python-tqdm

python-tqdm

Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)。

from tqdm import tqdm

tqdm(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, delay=0, gui=False,
                 **kwargs)
参数 描述
iterable 可迭代的对象, 在手动更新时不需要进行设置
desc 字符串, 左边进度条描述文字
total 总的项目数
leave bool值, 默认是True 迭代完成后是否保留进度条
file 输出指向位置, 默认是终端, 一般不需要设置
ncols int 调整进度条宽度, 默认是根据环境自动调节长度, 如果设置为0, 就没有进度条
unit 描述处理项目的文字, 默认是'it'
unit_scale 自动根据国际标准进行项目处理速度单位的换算

迭代器自动更新

import time
from tqdm import tqdm

for i in tqdm(range(100)):
    time.sleep(0.01)


100%|██████████| 100/100 [00:01<00:00, 54.92it/s]
# 对 tqdm的封装
import time
from tqdm import tqdm
from tqdm._tqdm import trange
 
for j in trange(100):
    time.sleep(0.1)
   
100%|██████████| 100/100 [00:01<00:00, 54.92it/s]
dic = ['a', 'b', 'c', 'd', 'e']
pbar = tqdm(dic)
for i in pbar:
    pbar.set_description('Processing '+i)
    time.sleep(0.2)
    
Processing e: 100%|██████████| 5/5 [00:01<00:00,  4.85it/s]

手动更新

import time
from tqdm import tqdm

pbar=tqdm(total=200)
pbar.set_description('Processing:')
# total表示总的项目, 循环的次数20*10(每次更新数目) = 200(total)
for i in range(20):
    # 进行动作, 这里是过0.1s
    time.sleep(0.1)
    # 进行进度更新, 这里设置10个
    pbar.update(10)
    
Processing:: 100%|██████████| 200/200 [00:02<00:00, 91.94it/s]

完整参数

def action():
    time.sleep(0.5)
with tqdm(total=100000, desc='Example', leave=True, ncols=100, unit='B', unit_scale=True) as pbar:
    for i in range(10):
        # 发呆0.5秒
        action()
        # 更新发呆进度
        pbar.update(10000)
        
Example: 100%|███████████████████████████████████████████████████| 100k/100k [00:05<00:00, 19.6kB/s]

set_description(str) 在进度条前面

set_postfix(dict) 在进度条后面

t = tqdm(range(100),ncols=150)

for i in t:
    # 设置进度条左边显示的信息
    t.set_description("GEN %i" % i)
    # 设置进度条右边显示的信息
    t.set_postfix(loss=random(), gen=randint(1, 999), str="h", lst=[1, 2])
    time.sleep(0.1)
    

GEN 99: 100%|█████████████████████████| 100/100 [00:11<00:00,  8.91it/s, gen=740, loss=0.365, lst=[1, 2], str=h]
   

其他样式

import time

def process_bar(percent, start_str='', end_str='', total_length=0):
    bar = ''.join(["\033[31m%s\033[0m"%'='] * int(percent * total_length)) + ''
    bar = '\r' + start_str + bar.ljust(total_length) + ' {:0>4.1f}%|'.format(percent*100) + end_str
    print(bar, end='', flush=True)
 
 
for i in range(101):
    time.sleep(0.1)
    end_str = '100%'
    process_bar(i/100, start_str='', end_str=end_str, total_length=15)
    
    
for i in range(101):
    time.sleep(0.1)
    end_str = '100%'
    process_bar(i/100, start_str='', end_str=end_str, total_length=15)
    
  
# =============== 100.0%|100%
posted @ 2021-08-10 22:03  贝壳里的星海  阅读(264)  评论(0编辑  收藏  举报