如何实现tqdm进度条单行显示,避免逐行刷新?
解决tqdm进度条单行显示同时打印元素的问题
你遇到的问题是因为print()会输出换行符,导致tqdm的进度条每次都被挤到新行。这里有两个简单的解决办法:
方法一:使用tqdm自带的write方法
tqdm专门提供了write()方法,用来在不干扰进度条的前提下输出内容,它会自动处理输出流,保证进度条始终在单行显示。修改后的代码如下:
from tqdm import tqdm from time import sleep def test(): my_list = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'] for i in tqdm(my_list): tqdm.write(i) # 替换原来的print(i) sleep(.1)
方法二:修改print的结束符并强制刷新
如果不想用tqdm的write方法,也可以修改print()的end参数为回车符\r,同时开启强制刷新,这样每次打印的内容会覆盖当前行,进度条就能保持在下方单行显示:
from tqdm import tqdm from time import sleep def test(): my_list = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'] for i in tqdm(my_list): print(i, end='\r', flush=True) # 替换原来的print(i) sleep(.1) print() # 循环结束后换行,避免后续内容和最后一个元素重叠
注意:第二种方法中,打印的元素会覆盖当前行的内容,循环结束后加个空print()可以避免后续输出和进度条区域混淆。
内容的提问来源于stack exchange,提问作者Rajesh Patnaik
相关产品推荐
相关产品推荐

