Python Jupyter笔记本中的TQM可反复打印新的进度条

Python Jupyter笔记本中的TQM可反复打印新的进度条,python,jupyter-notebook,tqdm,Python,Jupyter Notebook,Tqdm,我正在使用tqdm打印Jupyter笔记本中运行的脚本的进度。我正在通过tqdm.write()将所有消息打印到控制台。然而,这仍然给了我一个像这样的扭曲输出: 也就是说,每次必须打印新行时,都会在下一行打印新的进度条。当我通过终端运行脚本时,不会发生这种情况。如何解决此问题?尝试使用tqdm.notebook.tqdm而不是tqdm,如前所述 这可能很简单,只需将导入更改为: 从tqdm.notebook导入tqdm 祝你好运 EDIT:测试后,似乎tqdm在Jupyter笔记本的“文本模式

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


也就是说,每次必须打印新行时,都会在下一行打印新的进度条。当我通过终端运行脚本时,不会发生这种情况。如何解决此问题?

尝试使用
tqdm.notebook.tqdm
而不是
tqdm
,如前所述

这可能很简单,只需将导入更改为:

从tqdm.notebook导入tqdm

祝你好运


EDIT:测试后,似乎
tqdm
在Jupyter笔记本的“文本模式”下运行良好。很难说,因为您还没有提供一个打印语句,但看起来您的问题是由每次迭代中的打印语句引起的。print语句在每次状态栏更新之间输出一个数字(~0.89),这会弄乱输出。尝试删除打印语句。

这是TQM_笔记本不适合您的另一种解决方案

给出以下示例: 输出将如下所示(进度将显示为红色):

输出将更改为(不再显示红色):

这给了我们:

processed: 1                                                  
processed: 2                                                  
processed: 3                                                  
100%|██████████| 3/3 [00:02<00:00,  1.53it/s]
输出时(处理时更新描述):


已处理:3:100%|██████████| 3/3[00:02如果此处的其他提示不起作用,并且-就像我一样-您正在通过
progress\u apply
使用
pandas
集成,您可以让
tqdm
处理它:

from tqdm.autonotebook import tqdm
tqdm.pandas()

df.progress_apply(row_function, axis=1)

这里的要点在于
tqdm.autonotebook
模块。如中所述,这使得
tqdm
可以在Jupyter笔记本电脑和Jupyter控制台中使用的进度条格式之间进行选择-出于我方仍然缺乏进一步调查的原因,
tqdm.autonotebook
选择的特定格式在
中工作顺利>pandas
,而其他所有人都没有,对于
进度
,请具体应用。

要完成oscarbranson的回答,可以根据运行进度条的位置自动选择控制台或笔记本版本:

from tqdm.autonotebook import tqdm

可以找到更多信息

以上任何一项对我都不起作用。我发现运行以下命令会在出错后对该问题进行排序(它只会清除后台所有进度条的实例):

从TQM导入TQM
#你的代码出错了
tqdm.\u实例.清除()

现在大多数答案都过时了。如果正确导入TQM会更好

from tqdm import tqdm_notebook as tqdm

使用TQM\u笔记本电脑

from tqdm import tqdm_notebook as tqdm

x=[1,2,3,4,5]

for i in tqdm(range(0,len(x))):

    print(x[i])

对于所有在windows上无法使用此处提到的任何解决方案解决复制条问题的用户,我必须安装
colorama
软件包,正如修复该软件包时所述

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]

All:60%|████████████████████████                | 3/5[00:03使用TQM的进度条的另一个示例

从TQM导入TQM
我的列表=列表(范围(100))
以tqdm(总计=len(我的清单))作为pbar:
对于my_列表中的x:
pbar.update(1)

我没有使用
print()
语句,我使用了
tqdm.write()
。然而,
tqdm_笔记本
提供了很好的结果。谢谢:)你知道它是否支持Python 3.6吗?我没有遇到这样的运气。你会遇到什么错误?它对我来说很好。不可能用这么少的信息来帮助…是吗?你只是简单的
tqdm
,而不是
tqdm_笔记本
?这对Pytho很有效n 3.6和Jupyter 1.0.0。@bugmenot123捕捉良好,已修复。这似乎是一种最简单的方法:
从tqdm.autonotebook导入tqdm
实际上,当我使用
tqdm\u笔记本
时,我甚至可以进行正常的
打印
,并且不会影响进度条。另一种方法是使用此
进度条
progressbar
这是目前为止最好的答案。它再次发生了变化:
TQDMDepressionWarning:此函数将在tqdm==5.0.0中删除。请使用tqdm.notebook.tqdm而不是tqdm.tqdm\U notebook
谢谢!但是如果不存在实例,它会抛出并出错。仍然希望将其与脚本和IDE一起使用。这是我的代码。
try:#避免笔记本电脑上的问题/tqdm.tqdm._instances.clear()例外情况除外:通过
是的,如果不存在实例,它将抛出异常。您的尝试例外方法是否存在问题?这正是我所寻找的。从现在起,我将定期在笔记本中添加这一行。谢谢@JamesOwers
from tqdm.autonotebook import tqdm
tqdm.pandas()

df.progress_apply(row_function, axis=1)
from tqdm.autonotebook import tqdm
from tqdm import tqdm_notebook as tqdm
from tqdm import tqdm_notebook as tqdm

x=[1,2,3,4,5]

for i in tqdm(range(0,len(x))):

    print(x[i])
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]