【问题标题】:Printing on the same line on a jupyter notebook在 jupyter 笔记本上的同一行上打印
【发布时间】:2017-08-08 22:04:25
【问题描述】:

在 python 3 中,我们可以使用以下脚本轻松地在同一行打印。我用它来了解循环的进度(还剩多少时间)。但是,在 jupyter 中它不起作用(它打印在不同的行上)

import time
for f in range(10):
    print(f, end='\r', flush=True)
    time.sleep(10)

关闭 %pprint 的漂亮打印不起作用,我尝试使用 sys.stdout.write() 进行相同的操作,但我也遇到了这个问题。

【问题讨论】:

  • 不,我们的目标是不断地在同一行打印——作为循环内进度的指示;)
  • 我在终端 IPython 会话和 Jupyter 笔记本(分别为 Python 3.6.0 和 3.5.2)中都尝试了您的解决方案,在这两种情况下,它都打印在同一行,替换了之前的内容它。所以这似乎不是 Jupyter/IPython 的普遍问题。

标签: python jupyter-notebook


【解决方案1】:

“\r”部分会覆盖该行,如果您保留该部分,则附加到该行。你的版本 print(f, end='', flush=False) 可以工作,但我在 Python 3 下读过你需要使用 sys.stdout.write() 最好是如果你也添加刷新命令。

import sys
import time

for f in range(10):
    #delete "\r" to append instead of overwrite
    sys.stdout.write("\r" + str(f))
    sys.stdout.flush()
    time.sleep(10)

stdout.flush 在某些系统上是必需的,否则您将无法获得任何输出

【讨论】:

  • 赞成不使用额外的库。它在 JupyterLab 中工作。
【解决方案2】:

稍后找到解决方案(请注意,它在 pycharm jupyter 中不起作用,而仅在浏览器实现中起作用)。对我来说,print 工作正常,但建议使用 here display,但它会在字符串周围打印撇号。

from time import sleep
from IPython.display import clear_output, display

for f in range(10):
    clear_output(wait=True)
    print(f)  # use display(f) if you encounter performance issues
    sleep(10)

编辑:只是想补充一点,TQDM 通常也是实现此目标的好工具。它显示进度条并允许您在其下方写入输出或不同每个条的描述。另见this post

import sys
from tqdm import tqdm
from time import sleep

values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
    for i in values:
        pbar.set_description('processed: %d' % (1 + i))
        pbar.update(1)
        sleep(1)

还有颜色漂亮的笔记本

from tqdm import tqdm, tqdm_notebook
from time import sleep

for i in tqdm_notebook(range(2), desc='1st loop'):
    sleep(0.01)
    tqdm.write(f"Done task {i}")

【讨论】:

    【解决方案3】:

    前缀 \r 并添加参数 end="" 以打印,就像这样

    print("\rThis will be printed on the same line", end="")

    这适用于 Google Colab 的 Jupyter notebook。

    【讨论】:

    • 我认为你的第一个) 应该是"
    • 谢谢,简单且无需额外的软件包即可工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多