Jupyter Notebook:命令隐藏单元格的输出?

时间:2016-05-11 06:10:22

标签: ipython jupyter jupyter-notebook

在我的笔记本中,我有一个单元格返回临时计算结果。它有点长,所以在它运行后,我想隐藏它,并在需要时显示它。

要手动完成,我可以双击输出的左侧隐藏它

enter image description here

双击后 enter image description here

但有什么方法可以通过代码来做到这一点?例如,

单元格的最后一行,使用%%hide output之类的命令,输出将在完成运行后隐藏。

此外,我可以在输出HTML中获得此功能吗?

8 个答案:

答案 0 :(得分:29)

在单元格的末尾添加;以隐藏该单元格的输出。

答案 1 :(得分:16)

在较新的版本(我写这篇文章的时间为5.0.0)中,按下' o'在命令模式下,隐藏单元格的输出。如果您在输出前面三次点击,也会发生同样的情况。

答案 2 :(得分:9)

您可以将%%capture添加到单元格的开头。

Jupyter提供了一个神奇的单元格命令%%capture,该命令可让您捕获该单元格的所有输出。

您可以像这样使用它:

%%capture test print('test')

test.stdout =>'测试\ n'

https://ipython.readthedocs.io/en/stable/interactive/magics.html

答案 3 :(得分:7)

在新版本的Jupiter Notebook中,选择所需的单元格,确保您处于命令模式,然后在菜单栏上按单元格> 当前输出。然后,您有三个选择:

  • 切换(在命令模式下按 O 以应用相同的效果)
  • 切换滚动(默认输出)
  • 清除(一起清除输出)

Image to Menubar Options

此外,如果选择“全部输出”而不是“当前输出”,则可以对文档中的所有单元格应用相同的效果。

答案 4 :(得分:1)

根据this,我几分钟前就为自己想出了这个:

%%javascript

$('#maintoolbar-container').children('#toggleButton').remove()

var toggle_button = ("<button id='toggleButton' type='button'>Show Code</button>");
$('#maintoolbar-container').append(toggle_button);

var code_shown = false;

function code_toggle()
{

    if (code_shown)
    {
        console.log("code shown")
        $('div.input').hide('500');
        $('#toggleButton').text('Show Code');
    }
    else
    {
        console.log("code not shown")
        $('div.input').show('500');
        $('#toggleButton').text('Hide Code');
    }

    code_shown = !code_shown;
}

$(document).ready(function()
{
    code_shown=false;
    $('div.input').hide();
});

$('#toggleButton').on('click', code_toggle);

确实有一个小问题:每次运行该单元格(我放在顶部)时,它会添加一个按钮。所以,这是需要修复的东西。需要检查maintoolbar-container以查看该按钮是否已存在,然后不再添加。

修改

我添加了必要的代码:

$('#maintoolbar-container').children('#toggleButton').remove()

答案 5 :(得分:0)

不完全是您想要的,但是效果可能足以满足您的目的:

查看%%捕获魔法(https://nbviewer.jupyter.org/github/ipython/ipython/blob/1.x/examples/notebooks/Cell%20Magics.ipynb)。它使您可以将单元格输出分配给变量。通过稍后调用该变量,您可以看到输出。

答案 6 :(得分:0)

此代码片段捕获 stdout 输出并将其显示为某个可折叠部分:

import contextlib
import io
import IPython.display


@contextlib.contextmanager
def colapsible_stdout(name: str = 'stdout'):
  
  f = io.StringIO()
  with contextlib.redirect_stdout(f):
    yield
  content = f.getvalue()
  content = content.replace('\n', '<br/>')
  content = IPython.display.HTML(
      f'<details><summary>{name}</summary>{content}</details>'
  )
  IPython.display.display(content)

用法:

with colapsible_stdout():
  print('Some text')
  print('Some other text')

enter image description here

默认情况下该部分是折叠的,但我为截图将其展开。

答案 7 :(得分:-1)

如果你不介意一点点黑客攻击,那么你可以编写一个简单的脚本,将每个单元格的“collapsed”属性从false转换为true 在笔记本.ipynb文件(这是一个简单的JSON文件)。 但是,如果.ipynb格式发生变化,将来可能会失败。