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%