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

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


当前回答

对于每个人谁是在窗口,不能解决复制条的问题与任何解决方案在这里提到。我不得不安装colorama包,因为tqdm的已知问题已经解决了。

pip install colorama

试试下面这个例子:

from tqdm import tqdm
from time import sleep

for _ in tqdm(range(5), "All", ncols = 80, position = 0):
    for _ in tqdm(range(100), "Sub", ncols = 80, position = 1, leave = False):
        sleep(0.01)

这将产生如下内容:

All:  60%|████████████████████████                | 3/5 [00:03<00:02,  1.02s/it]
Sub:  50%|██████████████████▌                  | 50/100 [00:00<00:00, 97.88it/s]

其他回答

TQDM自动加载合适的进度条,无论是普通代码或交互环境通过

from tqdm.auto import tqdm

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

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

从tqdm。笔记本导入TQDM

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

使用Python 3.9.2和tqdm==4.62.3:

from tqdm.notebook import tqdm

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

对于每个人谁是在窗口,不能解决复制条的问题与任何解决方案在这里提到。我不得不安装colorama包,因为tqdm的已知问题已经解决了。

pip install colorama

试试下面这个例子:

from tqdm import tqdm
from time import sleep

for _ in tqdm(range(5), "All", ncols = 80, position = 0):
    for _ in tqdm(range(100), "Sub", ncols = 80, position = 1, leave = False):
        sleep(0.01)

这将产生如下内容:

All:  60%|████████████████████████                | 3/5 [00:03<00:02,  1.02s/it]
Sub:  50%|██████████████████▌                  | 50/100 [00:00<00:00, 97.88it/s]

大多数答案现在都过时了。最好正确地导入tqdm。

from tqdm import tqdm_notebook as tqdm