我可以向 tqdm 进度条添加消息吗?
Can I add message to the tqdm progressbar?
使用tqdm进度条时:是否可以在循环中将消息添加到与进度条相同的行?
我尝试使用 "tqdm.write" 选项,但它会在每次写入时添加一个新行。我希望每次迭代都在栏旁边显示一条短消息,该消息将在下一次迭代中消失。这可能吗?
您可以更改描述以在进度条前显示一条小消息,如下所示:
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)
/编辑:在 tqdm
的最新版本中,您可以使用 t.set_description("text", refresh=True)
(which is the default) and remove t.refresh()
(thanks to Daniel 作为提示)。
Usage of tqdm 中显示的示例对我来说效果很好。
pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:
pbar.set_description("Processing %s" % char)
或者,启动支持 walrus operator :=
:
的 Python 3.8
for char in (pbar := tqdm(["a", "b", "c", "d"])):
pbar.set_description("Processing %s" % char)
其他答案侧重于动态描述,但对于静态描述,您可以在 tqdm 函数中添加一个 desc
参数。
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]
您可以使用 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
来代替字典,只在进度条的末尾添加一个字符串。
我个人觉得使用 with
语句更简洁:
from tqdm import tqdm
with tqdm(['a','b','c']) as t:
for c in t:
t.set_description(f'{c}')
我个人在for循环之前使用.set_description()和一个progression_bar赋值语句:
from tqdm import tqdm
progression_bar = tqdm(["An", "iterable", "object"])
for element in (progression_bar):
progression_bar.set_description("Processing « %s »" % str(element))
虽然这里的答案都是正确的,但是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
使用tqdm进度条时:是否可以在循环中将消息添加到与进度条相同的行?
我尝试使用 "tqdm.write" 选项,但它会在每次写入时添加一个新行。我希望每次迭代都在栏旁边显示一条短消息,该消息将在下一次迭代中消失。这可能吗?
您可以更改描述以在进度条前显示一条小消息,如下所示:
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)
/编辑:在 tqdm
的最新版本中,您可以使用 t.set_description("text", refresh=True)
(which is the default) and remove t.refresh()
(thanks to Daniel 作为提示)。
Usage of tqdm 中显示的示例对我来说效果很好。
pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:
pbar.set_description("Processing %s" % char)
或者,启动支持 walrus operator :=
:
for char in (pbar := tqdm(["a", "b", "c", "d"])):
pbar.set_description("Processing %s" % char)
其他答案侧重于动态描述,但对于静态描述,您可以在 tqdm 函数中添加一个 desc
参数。
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]
您可以使用 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
来代替字典,只在进度条的末尾添加一个字符串。
我个人觉得使用 with
语句更简洁:
from tqdm import tqdm
with tqdm(['a','b','c']) as t:
for c in t:
t.set_description(f'{c}')
我个人在for循环之前使用.set_description()和一个progression_bar赋值语句:
from tqdm import tqdm
progression_bar = tqdm(["An", "iterable", "object"])
for element in (progression_bar):
progression_bar.set_description("Processing « %s »" % str(element))
虽然这里的答案都是正确的,但是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