Abstract
最近接触到了两个 Python 进度条工具:qqdm
和 tqdm
在此记录学习过程。
qqdm
Python 中的一个轻量级、快速的进度条工具。
Installation
pip install qqdm
Usage
下面是一个简单的例子,设脚本名为 demo.py
:
import time
import random
from qqdm import qqdm, format_str
tw = qqdm(range(10), desc=format_str('bold', 'Des'))
for i in tw:
loss = random.random()
acc = random.random()
tw.set_infos( # 每次迭代,是更新控制台内容
{
'loss': f'{loss:.4f}',
'acc': f'{acc:.4f}',
}
)
time.sleep(0.5)
在控制台输入 python demo.py
,则输出内容如下:
可以看到,set_infos
中的字典内容 loss
和 acc
被显示在了控制台。此外,显示的信息还有 Iters, Elapsed Time, Speed
,分别代表着当前迭代位置(6/10)、已耗时间和剩余时间(00:00:03<00:00:02)、迭代速度(1.96it/s)。
解读:
- 首先,我们要先创建一个
qqdm
对象,需要提供一个迭代器(range(10)
),和desc=format_str('bold', 'Description')
。 - 生成的
qqdm
对象也是迭代器,它返回原迭代器的内容。 desc=format_str('bold', 'Description')
对应控制台中进度条前的文字(见上图)。- 通过
qqdm
对象的set_infos()
函数更改控制台内容,需提供一个字典。
Notes
如果把代码改成下面这样:
import time
import random
from qqdm import qqdm, format_str
tw = qqdm(range(10), desc=format_str('bold', 'Description'))
info = {
'loss': '0.000',
'acc': '0.000'
}
for i in tw:
loss = random.random()
acc = random.random()
info['loss'] = f'{loss:.4f}'
info['acc'] = f'{acc:.4f}'
info[str(i)] = str(i * 2) # 每次迭代向 info 字典添加内容
tw.set_infos( # 每次迭代,是更新控制台内容, 哪怕每次提供的字典 keys 有变化,还是可以
info
)
time.sleep(1.0)
发现,控制台的表目是变化的, 0 1 2 ⋯ 0~1~2~\cdots 0 1 2 ⋯ 竟然逐渐显示:
还需要注意的地方是,信息字典的 key
只接受 str
,所以其他对象要先转化为字符串;value
不受限制。