iPython/ Jupyter notebook 只清除一行输出
Posted
技术标签:
【中文标题】iPython/ Jupyter notebook 只清除一行输出【英文标题】:iPython/ Jupyter notebook clear only one line of output 【发布时间】:2018-09-08 13:40:48 【问题描述】:如何在上一行打印 Jupyter 笔记本的状态?我想我正在寻找类似clear_output() 的东西,但只有一行。
示例代码:
from IPython.display import clear_output
import time
print('This is important info!')
for i in range(100):
print('Processing BIG data file '.format(i))
time.sleep(0.1)
clear_output(wait=True)
if i == 50:
print('Something bad happened on run . This needs to be visible at the end!'.format(i))
print('Done.')
当它运行时,它给出了覆盖前一个状态行的行为,但是标记为重要的两条线(带有感叹号和所有内容!)都丢失了。完成后,显示屏会显示:
Done.
应该说的是:
This is important info!
Something bad happened on run 50. This needs to be visible at the end!
Done.
This post 建议使用 clear_output() 然后重新打印所有内容。这似乎不切实际,因为我真正倾向于显示的数据量很大(很多图表,数据框,......)。
这是关于 clear_output() 的 two SO 链接。
有没有办法让这项工作不涉及重新打印所有内容?
【问题讨论】:
【参考方案1】:这个简单的转义序列技巧大部分时间都可以完成这项工作。如果使用得当,\n
和 \r
可以做很多事情。\r: (Carriage Return) (CR)
将光标返回到新行的开头而不移动到新行。\n:(Line Feed) (LF)
移动光标到下一行。
import time
print('This is important info!')
for i in range(100):
print("\r"+'Processing BIG data file '.format(i),end="")
time.sleep(0.1)
if i == 50:
print("\r"+'Something bad happened on run . This needs to be visible at the end!'.format(i))
print("\r"+'Done.')
【讨论】:
这对我有用。没有任何额外的包开销。很瘦。【参考方案2】:我用显示句柄的更新功能让它醒了:
from IPython.display import display
from time import sleep
print('Test 1')
dh = display('Test2',display_id=True)
sleep(1)
dh.update('Test3')
【讨论】:
【参考方案3】:这样就可以了:
import IPython
IPython.display.display_javascript(r'''
var el = document.querySelector('.output_text:last-of-type > pre');
el.innerhtml = el.innerHTML.replace(/(\n.*$)/gm,""); ''', raw=True)
【讨论】:
以上是关于iPython/ Jupyter notebook 只清除一行输出的主要内容,如果未能解决你的问题,请参考以下文章
iPython/ Jupyter notebook 只清除一行输出
在 IPython/Jupyter Notebooks 中显示行号