在 jupyter notebook 中只更新两行打印

Update only two lines in print inside jupyter notebbok

我只想在我的循环中打印两行,我从以下开始:

import time

for i in range(10):
    time.sleep(0.5)
    for j in range(10):
        time.sleep(0.5)
        print('Index1:', i)
        print('Index2:', j)

我在print的开头和结尾尝试了\r\nflush=True等不同组合,但没有成功((

我想看到的是接受答案的 GIF

我试过那些代码,但没有用,可能是因为我的 OS 是 Windows 或者我使用 jupyter notebook,我不知道((

在 Jupyter Notebook 中,您可以使用 IPython.display.clear_output(wait=True)

清除当前单元格输出

在终端中,可以使用 ANSI 转义码实现类似的行为,如以下代码片段所示:

import time

n = 15
for i in range(n):
    print(f"{i}s passed")
    print(f"{n-i}s remaining")
    time.sleep(1)
    print("\u001b[2A", end="") #ANSI escape code for cursor up 2 lines

对于 Jupyter,从 IPython.display 导入 clear_output。在终端上,您可以使用 os.system('clear') 表示 Linux 或 os.system('cls') 表示 Windows.

import time
import os
from IPython.display import clear_output

for i in range(10):
    for j in range(10):
        print(f'Index1: {i}\nIndex2: {j}')
        time.sleep(0.5)
        # for terminal ('clear' for Linux, 'cls' for Windows)
        # os.system('clear')
        # for Jupyter 
        clear_output(wait=True)

记住一定要在print()

里面使用end

试试这个代码:

import time

for i in range(10):
    time.sleep(0.5)
    for j in range(10):
        time.sleep(0.5)
        print(f'\rIndex1: {i}, Index2: {j}', flush=True, end='')