我正在使用tqdm在Jupyter笔记本上运行的脚本中打印进度。我正在通过tqdm.write()将所有消息打印到控制台。然而,这仍然给我一个倾斜的输出,如下所示:

也就是说,每当需要打印新的一行时,下一行就会打印一个新的进度条。当我通过终端运行脚本时,这不会发生。我怎么解决这个问题?


当前回答

尝试使用tqdm.notebook.tqdm代替tqdm,如下所述。

这可以像更改您的导入一样简单:

从tqdm。笔记本导入TQDM

编辑:经过测试,似乎tqdm实际上工作在“文本模式”在Jupyter笔记本。这很难判断,因为您没有提供最少的示例,但看起来问题是由每次迭代中的print语句引起的。print语句在每次状态栏更新之间输出一个数字(~0.89),这使输出变得混乱。尝试删除打印语句。

其他回答

如果这里的其他技巧不起作用,并且—就像我一样—您正在通过progress_apply使用pandas集成,您可以让tqdm处理它:

from tqdm.autonotebook import tqdm
tqdm.pandas()

df.progress_apply(row_function, axis=1)

这里的要点在于tqdm。autonotebook模块。正如他们在IPython笔记本中使用的说明中所述,这使得tqdm在Jupyter笔记本和Jupyter控制台中使用的进度条格式之间进行选择——出于我方面还缺乏进一步调查的原因,tqdm选择的具体格式。autootebook在pandas中工作得很顺利,而其他所有的都不能,特别是progress_apply。

以上这些对我都没用。我发现在错误后运行以下程序对这个问题进行排序(它只是在后台清除进度条的所有实例):

from tqdm import tqdm

# blah blah your code errored

tqdm._instances.clear()

使用Python 3.9.2和tqdm==4.62.3:

from tqdm.notebook import tqdm

for item in tqdm(list_of_items):
    do_something(item)

进度条使用tqdm的另一个例子

from tqdm import tqdm

my_list = list(range(100))
with tqdm(total=len(my_list)) as pbar:
    for x in my_list:
       pbar.update(1)

尝试使用tqdm.notebook.tqdm代替tqdm,如下所述。

这可以像更改您的导入一样简单:

从tqdm。笔记本导入TQDM

编辑:经过测试,似乎tqdm实际上工作在“文本模式”在Jupyter笔记本。这很难判断,因为您没有提供最少的示例,但看起来问题是由每次迭代中的print语句引起的。print语句在每次状态栏更新之间输出一个数字(~0.89),这使输出变得混乱。尝试删除打印语句。