141

使用 tqdm 进度条时:我可以在循环中将消息添加到与进度条相同的行吗?

我尝试使用“tqdm.write”选项,但它会在每次写入时添加一个新行。我希望每次迭代都在栏旁边显示一条短消息,该消息将在下一次迭代中消失。这可能吗?

4

6 回答 6

224

tqdm的用法中显示的示例对我来说效果很好。

pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:
    pbar.set_description("Processing %s" % char)

或者,启动支持海象运算符:=的 Python 3.8 :

for char in (pbar := tqdm(["a", "b", "c", "d"])):
    pbar.set_description("Processing %s" % char
于 2017-08-05T07:08:10.803 回答
126

您可以更改描述以在进度条之前显示一条小消息,如下所示:

from tqdm import trange
from time import sleep
t = trange(100, desc='Bar desc', leave=True)
for i in t:
    t.set_description("Bar desc (file %i)" % i)
    t.refresh() # to show immediately the update
    sleep(0.01)

/EDIT:在最新版本中tqdm,您可以使用t.set_description("text", refresh=True)这是默认设置)和删除t.refresh()(感谢Daniel的提示)。

于 2016-05-30T10:59:04.623 回答
68

其他答案侧重于动态描述,但对于静态描述,您可以desc在 tqdm 函数中添加一个参数。

from tqdm import tqdm

x = [5]*1000
for _ in tqdm(x, desc="Example"):
    pass
 
Example: 100%|██████████████████████████████████| 1000/1000 [00:00<00:00, 1838800.53it/s]
于 2020-07-31T04:08:44.787 回答
53

您可以使用set_postfix直接向栏添加值。

例子:

from tqdm import tqdm
pbar = tqdm(["a", "b", "c", "d"])
num_vowels = 0
for ichar in pbar:
    if ichar in ['a','e','i','o','u']:
        num_vowels += 1
    pbar.set_postfix({'num_vowels': num_vowels})

后缀字典集成到进度条中:

100%|███████████| 4/4 [00:11<00:00,  2.93s/it, num_vowels=1]

set_postfix_str您可以使用将字符串添加到进度条的末尾来代替字典。

于 2020-09-01T18:06:17.890 回答
6

我个人觉得使用以下with语句要干净得多:

from tqdm import tqdm

with tqdm(['a','b','c']) as t:
  for c in t:
    t.set_description(f'{c}')
于 2021-05-27T17:01:29.177 回答
0

I personally use .set_description() and a progression_bar assignment statement before the for loop:

from tqdm import tqdm

progression_bar = tqdm(["An", "iterable", "object"])
for element in (progression_bar):
    progression_bar.set_description("Processing « %s »" % str(element))
于 2022-01-12T20:53:51.340 回答