1 tqdm 简单介绍
tqdm 库是一个在 Python 中常用的进度条工具,能够帮助我们实时观测代码的运行进度.
2 tqdm 安装
首先检查是否已安装 tqdm 库,在终端输入:
pip show tqdm
若提示 WARNING: Package(s) not found: tqdm,则输入如下命令安装:
pip install tqdm
3 基本用法
3.1 在 for 循环中使用 tqdm:
首先导入 tqdm 库(注意不是 import tqdm,非常容易漏):
from tqdm import tqdm
定义一个简单的 for 循环,并在 range( ) 外套上 tqdm( ).
for i in tqdm(range(10)):
print(i)
运行结果如下:
100%|██████████| 10/10 [00:00<00:00, 125203.10it/s]
3.2 使用 trange 简化代码:
trange 是 tqdm 库提供的一个便捷函数,trange 等价于 tqdm (range),使用 trange 会让代码看起来更加简洁,比如能 trange 把上文的代码改写成:
from tqdm import trange
for i in trange(10):
print(i)
运行结果如下:
100%|██████████| 10/10 [00:00<00:00, 181571.60it/s]
4 高级用法
如果不满意 tqdm 提供的默认进度条样式,也可以手动进行修改.
4.1 修改进度条的样式
通过 ncols, position, leave, bar_format 等参数可以定制进度条的样式,例如:
from tqdm import tqdm
import time
# 自定义进度条长度和样式
for i in tqdm(range(100), ncols=50, position=0, leave=True, bar_format='{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}{postfix}]'):
time.sleep(0.01)
运行结果如下:
100%|█████████| 10/10 [00:00<00:00, 162569.92it/s]
其中各个参数的含义如下:
· ncols:决定了进度条的总宽度,增加nols的值会让进度条更宽.
· position:这个参数控制进度条在终端中的位置,position=0 则表示会出现在顶部(第一行),而position=1 则会让进度条在第二行显示.
· leave:决定了循环结束后是否保留进度条. 如果 leave=False 则在循环后进度条将被清除.
· bar_format:决定了进度条的显示格式. 例如,{l_bar}
和 {bar}
分别代表已完成的进度条部分和未完成的进度条部分,{n_fmt}
和 {total_fmt}
分别代表当前迭代次数和总迭代次数,等等.
尝试将 ncols 的值修改为 70,运行结果如下,可以看到进度条明显变长:
100%|█████████████████████████████| 10/10 [00:00<00:00, 169125.16it/s]
4.2 显示性能指标
tqdm 默认会显示处理速度(items/s),但可以通过 unit 和 unit_scale 参数来调整速度的单位.,例如:
from tqdm import tqdm
import time
# 显示性能指标,自定义单位
for i in tqdm(range(1000), desc="Processing", unit="it", unit_scale=True):
time.sleep(0.01)
运行结果如下:
Processing: 100%|██████████| 1.00k/1.00k [00:10<00:00, 97.4it/s]
其中各个参数的含义如下:
· unit:设置速度单位为 "it" ( 迭代次数 ).
· unit_scale:设置为 True 会根据迭代次数自动选择合适的单位 ( 如 K,M,G 等 ) .
4.3 设置进度描述
通过 desc 参数可以设置进度条的描述信息:
from tqdm import tqdm
import time
# 设置进度描述
for i in tqdm(range(100), desc="Downloading files"):
time.sleep(0.01)
运行结果如下:
Downloading files: 100%|██████████| 100/100 [00:01<00:00, 97.77it/s]
4.4 手动模式
tqdm 还可以实现手动增加进度:
with tqdm(total=100) as pbar:
for i in range(10):
sleep(0.1)
pbar.update(10)
运行结果如下:
100%|██████████| 100/100 [00:01<00:00, 99.30it/s]
5 注
· 当出现多层循环的时候,一般仅把 tqdm 使用在最外层的循环上.
· 在复现本文的代码时,如果遇到问题,欢迎私信或评论区联系作者.