用tqdm显示进度条

tdqm用法

官方文档

显示进度条

from tqdm import tqdm
pbar = tqdm(total=重复次数, dynamic_ncols=True, initial=0)
for i in range(重复次数):
    pbar.set_description_str(前缀字符串)
    # 等价于写 pbar.desc = 前缀字符串
    pbar.set_postfix_str(后缀字符串)
    # 等价于写 pbar.postfix = 后缀字符串
    pbar.update()
pbar.close()
prefix:  85%|█████████████▏        | 85/100 [00:08<00:01,  9.94it/s, suffix]

常用参数:

  • dynamic_ncols :默认False,请选为True以使终端宽度变化时,进度条会随着变化
dynamic_ncols 终端窗口变窄` 终端窗口变宽
False 1. 很多行,输出长度都是原窗口的宽度 2. 输出长度不随着窗口变宽而增加
True 3. 原有的一行保留,然后空一行,在另起一行适配性的窗口输出 4. 输出长度随着窗口变宽而增加
  1. 屏幕快照 2019-09-05 16.14.35

  2. 屏幕快照 2019-09-05 16.14.15

  3. 屏幕快照 2019-09-05 16.15.31

  4. 屏幕快照 2019-09-05 16.15.52

  • initial:进度条初始值,默认为0

退出时清除此进度条

  • pbar.close()保留此进度条
pbar = tqdm(total=重复次数, leave=True)
pbar = tqdm(total=重复次数) # default leave=True
  • pbar.close()清除此进度条
pbar = tqdm(total=重复次数, leave=False)

多个进度条并行

使用position参数,从0开始计算,position越大打印出来所在行最下

pbar0 = tqdm(total=重复次数, leave=False, position=0)
pbar1 = tqdm(total=重复次数, leave=False, position=1)
pbar3 = tqdm(total=重复次数, leave=False, position=2)

## 同时更新pbar0,pbar1,pbar3

pbar0.close()
pbar1.close()
pbar2.close()

示例

from tqdm import tqdm

fruits = ['apple', 'banana', 'orange']
pbars = {fruit: tqdm(total=100, leave=False, position=0)
         for fruit in fruits}

for i in range(300):
    fruit = fruits[i%3]
    pbars[fruit].set_description_str(fruit)
    pbar.set_postfix_str(i)
    pbars[fruit].update()

for pbar in pbars:
    pbar.close()
apple:  27%|████████████▋                 | 27/100 [00:07<00:22,  3.32it/s, 78]
banana:  26%|███████████▉                 | 26/100 [00:07<00:22,  3.32it/s, 76]
orange:  26%|███████████▉                 | 26/100 [00:07<00:22,  3.32it/s, 77]

显示实时更新的字符串

from tqdm import tqdm
pbar = tqdm(bar_format='{desc}') # 即不要进度条,只有description_str的意思
for i in range(重复次数):
    pbar.set_description_str(字符串)
    pbar.update()
pbar.close()

例如

from tqdm import tqdm
pbar = tqdm(bar_format='{desc}')
for i in range(100):
    sleep(0.1)
    pbar.set_description_str('prefix %d'%i)
    pbar.update()
pbar.close()
prefix 24