如何隐藏IPython Notebook中的一个特定单元格(输入或输出)?

Pan*_*Yan 33 ipython ipython-notebook

有没有办法在IPython笔记本中有选择地隐藏一个特定的输入或输出单元?

我只能找到以下代码来显示/隐藏所有输入单元格.

http://blog.nextgenetics.net/?e=102

但是,如果我只想隐藏笔记本的第一个输入单元怎么办?

Tom*_*ger 38

现在使用标签将其内置到nbconvert(从5.3.0开始).

这是从输出中删除特定单元格的示例.用这个笔记本.该示例有三个单元格:一个markdown单元格,一个将被隐藏的代码单元格,以及一个不会被隐藏的代码单元格.

  1. remove_cell使用笔记本或JupyterLab内置的标签编辑器将标签添加到您要隐藏的任何单元格中(具体名称"remove_cell"无关紧要)
  2. 用nbconvert转换

    jupyter nbconvert nbconvert-example.ipynb --TagRemovePreprocessor.remove_cell_tags='{"remove_cell"}'

带有标记的任何单元格remove_cell都将从输出中删除.

隐

除了整个单元格,您只需过滤输入或仅输出:

  • TagRemovePreprocessor.remove_input_tags
  • TagRemovePreprocessor.remove_single_output_tags
  • TagRemovePreprocessor.remove_all_outputs_tags

  • 谢谢你.它是否仅适用于html输出?如果使用`jupyter nbconvert --to notebook --inplace ...`,在生成的.ipynb文件中似乎没有隐藏任何内容. (2认同)
  • 我不得不在Windows上交换报价。例如:`jupyter nbconvert nbconvert-example.ipynb --TagRemovePreprocessor.remove_cell_tags =“ {'a','b'}”“。 (2认同)
  • 我必须将大括号更改为方括号(`list`)才能使其正常工作,即`--TagRemovePreprocessor.remove_cell_tags='["remove_cell"]'` (2认同)

Fer*_*ard 16

这是Mathmagician答案的扩展,它使您能够:

  • 切换只是一个单元格(JS函数名称有一个随机后缀,所以如果使用多次,它不会与其他用法冲突)
  • 切换当前单元格下方的单元格 - 这在RISE演示文稿非常方便,您可能希望显示代码,然后隐藏它以显示其输出

切换的演示

您需要做的是首先运行以下代码来定义hide_toggle函数:

from IPython.display import HTML
import random

def hide_toggle(for_next=False):
    this_cell = """$('div.cell.code_cell.rendered.selected')"""
    next_cell = this_cell + '.next()'

    toggle_text = 'Toggle show/hide'  # text shown on toggle link
    target_cell = this_cell  # target cell to control with toggle
    js_hide_current = ''  # bit of JS to permanently hide code in current cell (only when toggling next cell)

    if for_next:
        target_cell = next_cell
        toggle_text += ' next cell'
        js_hide_current = this_cell + '.find("div.input").hide();'

    js_f_name = 'code_toggle_{}'.format(str(random.randint(1,2**64)))

    html = """
        <script>
            function {f_name}() {{
                {cell_selector}.find('div.input').toggle();
            }}

            {js_hide_current}
        </script>

        <a href="javascript:{f_name}()">{toggle_text}</a>
    """.format(
        f_name=js_f_name,
        cell_selector=target_cell,
        js_hide_current=js_hide_current, 
        toggle_text=toggle_text
    )

    return HTML(html)
Run Code Online (Sandbox Code Playgroud)

然后在像这样的单元格中使用它:

x = 1
y = 2
print('Result is {} + {}'.format(x, y))

hide_toggle()
Run Code Online (Sandbox Code Playgroud)

或者这个(如果你想切换下一个单元格)

hide_toggle(for_next=True)
Run Code Online (Sandbox Code Playgroud)

  • 啊对了,谢谢,我现在将其更改为向后兼容的字符串格式化方式 (2认同)
  • 请注意,这仅适用于 Jupyter Notebook。这不适用于 Jupyter Lab 或导出为 html。 (2认同)

Jam*_*ers 12

这是一种方法,允许您通过仅编辑单元格元数据来隐藏HTML/PDF输出中的单元格.

我正在使用的版本:

$ jupyter notebook --version

4.1.0

$ jupyter nbconvert --version

4.2.0

  1. 按照Github上的安装说明下载ipython笔记本扩展模板:pip install https://github.com/ipython-contrib/IPython-notebook-extensions/tarball/master
  2. jupyter notebook
  3. localhost:8888/nbextensions(或你开始的任何端口)并激活Printview
  4. 回去localhost:8888/tree,创建一个新的笔记本,然后进入它
  5. 创建一个代码单元,其中包含一些产生输出的代码,例如 print("You can see me") #but not me
  6. View> Cell Toolbar>Edit Metadata
  7. 单击Edit Metadata现在显示在单元格右上角的按钮
  8. 添加'hide_input':True到JSON如矿山看起来像{ "collapsed": false, "hide_input": true, "trusted": true }
  9. 保存笔记本
  10. 回到终端并执行 jupyter nbconvert --to pdf --template printviewlatex.tplx notebookname.ipynb(如果你的笔记本被调用notebookname.ipynb.ipynb)

您现在应该在目录中有一个名为notebookname.pdf的文档.希望它应该只有文本You can see me...手指交叉.

  • 好细节。不好的过程:太重了。我们可以在单元格本身中添加注释吗?这个过程很麻烦 (2认同)

小智 9

好的,在尝试没有成功之后,这里给出的答案。我找到了 kirbs 的这个扩展。Hide_code nbextension它工作得很好。但建议执行以下操作:

首先,确保您已更新 jupyter、nbconverter、nbconverter 扩展和 jupyter serverextension。如果您这样做了,那么您可以在 anaconda 提示符下执行以下操作(以管理员权限打开):

  1. pip install hide_code
  2. jupyter nbextension install --py hide_code
  3. jupyter nbextension enable --py hide_code
  4. jupyter serverextension enable --py hide_code

最后,如果您使用 anaconda 发行版打开笔记本,请确保也使用以下命令:

  1. jupyter nbextension install --sys-prefix --py hide_code
  2. jupyter nbextension enable --sys-prefix --py hide_code
  3. jupyter serverextension enable --sys-prefix --py hide_code

如果这些命令的执行没有错误,那么您将能够看到并使用工具栏中的隐藏代码选项,如下所示:

Hide_code 工具栏

完毕!如果您使用导出按钮,瞧!

导出按钮

祝你好运


Mat*_*ian 7

您可以更改隐藏所有输入单元格的解决方案,以便仅影响单个单元格.

更改'div.input''div.cell.code_cell.rendered.selected div.input'.

HTML('''<script>
code_show=true; 
function code_toggle() {
    if (code_show){
        $('div.cell.code_cell.rendered.selected div.input').hide();
    } else {
        $('div.cell.code_cell.rendered.selected div.input').show();
    }
    code_show = !code_show
} 

$( document ).ready(code_toggle);
</script>

To show/hide this cell's raw code input, click <a href="javascript:code_toggle()">here</a>.''')
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为当您单击单元格输出上的" 单击此处 "提示时,该单元格将成为"选定"单元格,从而变为隐藏状态.

如果您的JavaScript代码<script></script>使用这样的代码行在标记内执行切换

$( document ).ready(code_toggle);
Run Code Online (Sandbox Code Playgroud)

然后,当执行输入单元格时,块将自动隐藏("默认情况下").

请记住,如果默认情况下隐藏单元格输入,则必须使用" 运行单元格"(Ctrl+ Return)选项运行单元格,而不是 " 运行单元格"和"选择/插入下方"选项.这些将在执行JavaScript之前提示将"选定"标签移动到下一个单元格,因此您可能最终隐藏在其输出中没有" 单击此处 "切换链接的单元格.在这种情况下,您将必须检查单元格并浏览相关标签并更改display='none';display='block';.

请注意,这必须放在单元格中任何代码的末尾,并且在执行此代码之前需要从IPython.display导入HTML.你可以通过执行来实现

from IPython.display import HTML
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用这个解决方案。我把它隐藏了,但是当我导出为 html 时,代码就会显示出来。如何在不显示特定单元格的情况下导出笔记本? (2认同)

G M*_*G M 7

在Jupiter笔记本中,栏上还有一个选项: 在此输入图像描述 您可以Clear输出,也可以使用隐藏它Toggle.在这两种情况下,您都不会删除在单元格内计算的任何变量.


sho*_*see 5

如果有人发现排除所有代码单元格有帮助(这不是这里要求的内容),您可以添加此标志 nbconvert --TemplateExporter.exclude_code_cell=True