使用tqdm进度条时:我可以在循环中将进度条添加到与进度条相同的行吗?
我尝试使用"tqdm.write"选项,但它在每次写入时都添加了一个新行.我希望每次迭代都在条形图旁边显示一条短消息,它将在下一次迭代中消失.这可能吗?
Ghr*_*rua 59
使用tqdm中显示的示例对我很有用.
pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:
pbar.set_description("Processing %s" % char)
Run Code Online (Sandbox Code Playgroud)
Bha*_*sha 46
其他答案侧重于动态描述,但对于静态描述,您可以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]
Run Code Online (Sandbox Code Playgroud)
gab*_*ous 44
您可以更改说明以在进度条前显示一条小消息,如下所示:
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)
Run Code Online (Sandbox Code Playgroud)
Mar*_*kus 42
您可以使用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})
Run Code Online (Sandbox Code Playgroud)
后缀字典集成到进度条中:
100%|???????????| 4/4 [00:11<00:00, 2.93s/it, num_vowels=1]
Run Code Online (Sandbox Code Playgroud)
您可以使用set_postfix_str
将字符串添加到进度条的末尾而不是字典。
我个人认为使用以下with
语句更清晰:
from tqdm import tqdm
with tqdm(['a','b','c']) as t:
for c in t:
t.set_description(f'{c}')
Run Code Online (Sandbox Code Playgroud)
虽然这里的所有答案都是正确的,tqdm
但也提供了一种set_postfix_str
方法。优点set_postfix
是您可以传递自己的格式化字符串来代替键值对。还set_postfix
按字母顺序对键值对进行排序。这是一个 MWE。
from tqdm import tqdm
import numpy as np
loop_obj = tqdm(np.arange(10))
for i in loop_obj:
loop_obj.set_description(f"Count: {i}") # Adds text before progessbar
loop_obj.set_postfix_str(f"Next count: {i+1}") # Adds text after progressbar
Run Code Online (Sandbox Code Playgroud)