notebook code ipython ipython-notebook

ipython - code - jupyter hide cell



¿Cómo ocultar una celda específica(entrada o salida) en IPython Notebook? (9)

¿Hay alguna forma de ocultar selectivamente una celda de entrada o salida específica en una notebook IPython?

Solo pude encontrar el siguiente código para mostrar / ocultar todas las celdas de entrada.

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

¿Pero qué pasa si solo quiero ocultar la primera celda de entrada de un cuaderno?


Ahora está integrado en nbconvert (a partir del 5.3.0 ) usando etiquetas.

Aquí hay un ejemplo eliminando una celda específica de la salida. Utilizando este cuaderno . El ejemplo tiene tres celdas: una celda de reducción, una celda de código que se ocultará y una celda de código que no se ocultará.

  1. Agregue la etiqueta remove_cell a las celdas que desee ocultar utilizando el editor de etiquetas integrado en el cuaderno o JupyterLab (el nombre específico "remove_cell" no importa)
  2. Convertir con nbconvert

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

Cualquier celda con la etiqueta remove_cell se eliminará de la salida.

Además de celdas completas, puede filtrar solo entradas o solo salidas:

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

En caso de que a alguien nbconvert --TemplateExporter.exclude_code_cell=True útil excluir todas las celdas de código (que no es lo que se solicita aquí), puede agregar este indicador nbconvert --TemplateExporter.exclude_code_cell=True


En el cuaderno de Júpiter, también hay una opción en la barra: Puede Clear la salida o puede ocultarla usando Toggle . En ambos casos no eliminarás ninguna variable calculada dentro de la celda.


Esta es una extensión de la respuesta de Mathmagician, que le permite:

  • alternar solo una celda (el nombre de la función JS tiene un sufijo aleatorio, por lo que si se usa más de una vez, no entrará en conflicto con otros usos)
  • alternar la celda debajo de la celda actual; esto es muy útil en las presentaciones RISE, donde es posible que desee mostrar el código, pero luego esconderlo para mostrar su salida

Lo que debe hacer es ejecutar primero el siguiente código para definir la función 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)

Y luego usarlo en celdas como esta:

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

O esto (si quieres cambiar la siguiente celda)

hide_toggle(for_next=True)


Este es un método que le permite ocultar celdas de la salida HTML / PDF editando solo los metadatos de las celdas.

Versiones que estoy usando:

$ jupyter notebook --version

4.1.0

$ jupyter nbconvert --version

4.2.0

  1. Descargue las plantillas de la extensión de ipython notebook siguiendo las instrucciones de instalación en Github: pip install https://github.com/ipython-contrib/IPython-notebook-extensions/tarball/master
  2. ejecuta el jupyter notebook
  3. vaya a localhost:8888/nbextensions (o cualquier puerto que haya iniciado) y active Printview
  4. vuelve a localhost:8888/tree , crea un nuevo cuaderno y entra en él
  5. cree una celda de código con algún código que produzca salida, por ejemplo, print("You can see me") #but not me
  6. Vaya a View > Cell Toolbar > Edit Metadata
  7. haga clic en el botón Edit Metadata ahora se muestra en la parte superior derecha de la celda
  8. agregar ''hide_input'':True al json, por ejemplo, el mío se veía como { "collapsed": false, "hide_input": true, "trusted": true } después
  9. guardar cuaderno
  10. vuelva al terminal y ejecute jupyter nbconvert --to pdf --template printviewlatex.tplx notebookname.ipynb (si su notebook se llama notebookname.ipynb.ipynb )

Ahora debería tener un documento llamado notebookname.pdf en el directorio. Con suerte debería tener solo el texto. You can see me en él ... dedos cruzados.



La solución @Mathmagician es casi perfecta, pero tiene muchos efectos secundarios.

Más correcto sería como:

from IPython.core.display import display, HTML toggle_code_str = '''''' <form action="javascript:code_toggle()"><input type="submit" id="toggleButton" value="Toggle Code"></form> '''''' toggle_code_prepare_str = '''''' <script> function code_toggle() { if ($(''div.cell.code_cell.rendered.selected div.input'').css(''display'')!=''none''){ $(''div.cell.code_cell.rendered.selected div.input'').hide(); } else { $(''div.cell.code_cell.rendered.selected div.input'').show(); } } </script> '''''' display(HTML(toggle_code_prepare_str + toggle_code_str)) def toggle_code(): display(HTML(toggle_code_str))

La llamada toggle_code puede colocarse en alguna celda de código antes que en otro código, por lo que si el código en la celda se ejecuta lentamente, no habrá efectos secundarios. También resuelve el problema con Ejecutar celdas y Seleccionar / Insertar a continuación

Agrega el botón de alternar, pero el estado inicial no se puede administrar


Ok, después de intentar sin éxito las respuestas aquí indicadas. Encontré esta extensión de kirbs. Hide_code nbextension Funciona bien. Pero se recomienda hacer lo siguiente:

En primer lugar, asegúrese de haber actualizado su jupyter, el nbconverter, las extensiones del nbconverter y la extensión del servidor jupyter. Si lo hizo, puede hacer lo siguiente en el indicador de anaconda (Abierto con privilegios de administrador):

  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

Finalmente, si está utilizando la distribución de anaconda para abrir sus cuadernos, asegúrese de usar también estos comandos:

  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

Si no hay ningún error en la ejecución de estos comandos, podrá ver y usar las opciones de ocultar código en la barra de herramientas como se muestra aquí:

Barra de herramientas ocultar código

¡Hecho! Si usas el botón para exportar y voilá!

Botón de exportación

Buena suerte


Su solución para ocultar todas las celdas de entrada puede modificarse para afectar a una sola celda.

Cambie ''div.input'' a ''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>.'''''')

Esto funciona porque al hacer clic en el mensaje " haga clic aquí " en la salida de una celda, esa celda se convierte en la celda "seleccionada" y, por lo tanto, se oculta.

Si su código JavaScript ejecuta una alternancia dentro de las etiquetas <script></script> con una línea de código como esta

$( document ).ready(code_toggle);

entonces el bloque se ocultará automáticamente ("por defecto") cuando se ejecute la celda de entrada.

Tenga en cuenta que si realiza entradas de celda ocultas de manera predeterminada, debe ejecutar la celda con la opción Ejecutar celdas ( Ctrl + Retorno ), no con las opciones Ejecutar celdas y Seleccionar / Insertar a continuación . Estos indicarán el movimiento de la etiqueta "seleccionada" a la siguiente celda antes de ejecutar el JavaScript, por lo que puede terminar ocultando una celda que no tiene el enlace de " haga clic aquí " en su salida. En cuyo caso, tendrá que inspeccionar la celda y navegar a través de las etiquetas relevantes y cambiar display=''none''; para display=''block''; .

Tenga en cuenta que esto se debe colocar al final de cualquier código en su celda y que necesita importar HTML desde IPython.display antes de ejecutar este código. Puedes hacerlo ejecutando

from IPython.display import HTML