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á.
- 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) 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
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
- 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
- Esto solo instala archivos en su directorio de datos local de jupyter. Detalles completos en el readme
- ejecuta el
jupyter notebook
- vaya a
localhost:8888/nbextensions
(o cualquier puerto que haya iniciado) y activePrintview
- vuelve a
localhost:8888/tree
, crea un nuevo cuaderno y entra en él - cree una celda de código con algún código que produzca salida, por ejemplo,
print("You can see me") #but not me
- Vaya a
View
>Cell Toolbar
>Edit Metadata
- haga clic en el botón
Edit Metadata
ahora se muestra en la parte superior derecha de la celda - agregar
''hide_input'':True
al json, por ejemplo, el mío se veía como{ "collapsed": false, "hide_input": true, "trusted": true }
después - guardar cuaderno
- vuelva al terminal y ejecute
jupyter nbconvert --to pdf --template printviewlatex.tplx notebookname.ipynb
(si su notebook se llamanotebookname.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.
Finalmente encontré que es posible usar esta extensión.
https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/usability/hide_input.js
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):
-
pip install hide_code
-
jupyter nbextension install --py hide_code
-
jupyter nbextension enable --py hide_code
-
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:
-
jupyter nbextension install --sys-prefix --py hide_code
-
jupyter nbextension enable --sys-prefix --py hide_code
-
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á!
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