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]