【问题标题】:Jupyter Notebook: command for hide the output of a cell?Jupyter Notebook:隐藏单元格输出的命令?
【发布时间】:2016-09-06 08:44:46
【问题描述】:

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

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

双击后

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

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

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

【问题讨论】:

  • 从笔记本中的代码控制它的唯一方法是生成具有隐藏/显示按钮的自定义 HTML 输出。
  • @ThomasK,所以我不能automatically通过输出来隐藏输出?
  • 您实际上可能能够“显示”一些被执行并执行的 Javascript,但它有点 hackish。我不知道它的 JS 调用是什么。

标签: ipython jupyter jupyter-notebook


【解决方案1】:

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

【讨论】:

  • 我可能不清楚。我想隐藏,但稍后如果我打开一个按钮或类似的东西,它可能会显示出来。
  • 不,这只会消除显示单元格的最新输出。示例:打印 3 ;
  • 这不回答OP...如果单元格中有print语句(例如),它仍然会显示。
【解决方案2】:

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

o

【讨论】:

  • 这回答了我遇到的问题,谢谢。按'o'只有输出被隐藏,你可以再次按下它来恢复输出:)
  • 对我来说,双击输出前面的工作。然后,再次显示输出,单击就足够了。
  • 即使这个快捷方式有用,但它并没有回答OP...OP的意思是用命令隐藏输出(也许不可能)。
【解决方案3】:

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

Jupyter 提供了一个名为 %%capture 的魔法单元命令,允许您从该单元捕获所有输出。

你可以这样使用它:

%%capture test print('test')

test.stdout => '测试\n'

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

【讨论】:

  • %%capture 也可以在没有目标变量的情况下工作。只需将%%capture 添加到单元格的开头即可。 .
【解决方案4】:

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

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

Image to Menubar Options

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

【讨论】:

  • 菜单:单元格/所有输出/清除
【解决方案5】:

不完全是您所追求的,但效果可能足以满足您的目的:

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

【讨论】:

    【解决方案6】:

    基于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()
    

    【讨论】:

      【解决方案7】:

      这段代码 sn-p 捕获标准输出输出并将其显示为一些可折叠的部分:

      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')
      

      默认情况下该部分是折叠的,但我为屏幕截图取消了折叠。

      【讨论】:

      • 这是一个不错的 hack,在我的情况下,任何其他方法都不起作用,因为输出是从低级库记录的。
      【解决方案8】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-24
        • 1970-01-01
        • 1970-01-01
        • 2019-01-25
        • 2019-11-24
        相关资源
        最近更新 更多