web-dev-qa-db-de.com

Wie verstecke ich eine bestimmte Zelle (Eingabe oder Ausgabe) in IPython Notebook?

Gibt es eine Möglichkeit, eine bestimmte Eingabe- oder Ausgabezelle in IPython Notebook selektiv auszublenden?

Ich konnte nur den folgenden Code finden, um alle Eingabezellen anzuzeigen/auszublenden.

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

Was aber, wenn ich nur die erste Eingabezelle eines Notebooks ausblenden möchte?

31
Pan Yan

Dies ist jetzt in nbconvert ( ab 5.3. ) über Tags eingebaut.

Im folgenden Beispiel wird eine bestimmte Zelle aus der Ausgabe entfernt. Mit dieses Notizbuch . Das Beispiel enthält drei Zellen: eine Markdown-Zelle, eine Code-Zelle, die ausgeblendet wird, und eine Code-Zelle, die nicht ausgeblendet wird.

  1. Ergänzen Sie die remove_cell Markieren Sie alle Zellen, die Sie ausblenden möchten, mit dem im Notizbuch oder JupyterLab integrierten Tag-Editor (der spezifische Name "remove_cell" spielt keine Rolle).
  2. Mit nbconvert konvertieren

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

Beliebige Zellen mit dem Tag remove_cell wird aus der Ausgabe entfernt.

hidden

Zusätzlich zu ganzen Zellen können Sie nur Eingaben oder nur Ausgaben filtern:

  • TagRemovePreprocessor.remove_input_tags
  • TagRemovePreprocessor.remove_single_output_tags
  • TagRemovePreprocessor.remove_all_outputs_tags
33
TomAugspurger

Dies ist eine Erweiterung der Antwort von Mathmagician, mit der Sie:

  • schalten Sie nur eine einzelne Zelle um (der JS-Funktionsname hat ein zufälliges Suffix. Wenn er also mehrmals verwendet wird ) würde nicht im Widerspruch zu anderen Verwendungen stehen)
  • schalten Sie die Zelle unter der aktuellen Zelle um - dies ist sehr praktisch in RISE-Präsentationen , wo Sie den Code möglicherweise anzeigen möchten, ihn dann aber ausblenden, um seine Ausgabe anzuzeigen

demo of the toggle

Führen Sie zunächst den folgenden Code aus, um die Funktion hide_toggle Zu definieren:

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)

Und dann benutze es in solchen Zellen:

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

hide_toggle()

Oder dies (wenn Sie die nächste Zelle umschalten möchten)

hide_toggle(for_next=True)
12
Ferrard

Mit der folgenden Methode können Sie Zellen in der HTML/PDF-Ausgabe ausblenden, indem Sie nur die Zellmetadaten bearbeiten.

Versionen, die ich verwende:

$ jupyter notebook --version

4.1.0

$ jupyter nbconvert --version

4.2.0

  1. Laden Sie die ipython notebook-Erweiterungsvorlagen herunter, indem Sie die folgenden Installationsanweisungen auf Github befolgen: pip install https://github.com/ipython-contrib/IPython-notebook-extensions/tarball/master
  2. führe jupyter notebook aus
  3. gehen Sie zu localhost:8888/nbextensions (oder dem Port, auf dem Sie gestartet haben) und aktivieren Sie Printview
  4. gehe zurück zu localhost:8888/tree, erstelle ein neues Notizbuch und gehe hinein
  5. erstellen Sie eine Code-Zelle mit etwas Code, der eine Ausgabe erzeugt, z. print("You can see me") #but not me
  6. gehe zu View> Cell Toolbar> Edit Metadata
  7. klicken Sie auf die Schaltfläche Edit Metadata, die oben rechts in der Zelle angezeigt wird
  8. fügen Sie 'hide_input':True zum json hinzu, z. meins sah aus wie { "collapsed": false, "hide_input": true, "trusted": true } danach
  9. notizbuch speichern
  10. gehe zurück zum Terminal und führe jupyter nbconvert --to pdf --template printviewlatex.tplx notebookname.ipynb aus (wenn dein Notebook notebookname.ipynb.ipynb heißt)

Sie sollten jetzt ein Dokument mit dem Namen notebookname.pdf im Verzeichnis haben. Hoffentlich sollte nur der Text You can see me Drin sein ... Daumen drücken.

11
James Owers

Ihre Lösung zum Ausblenden aller Eingabezellen kann so geändert werden, dass nur eine einzelne Zelle betroffen ist.

Ändern Sie 'div.input' In '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>.''')

Dies funktioniert, da beim Klicken auf die Eingabeaufforderung " hier klicken" in der Ausgabe einer Zelle diese Zelle zur "ausgewählten" Zelle wird und somit ausgeblendet wird.

Wenn Ihr JavaScript-Code ein Umschalten innerhalb der <script></script> - Tags mit einer Codezeile wie dieser ausführt

$( document ).ready(code_toggle);

dann wird der Block automatisch ("standardmäßig") ausgeblendet, wenn die Eingabezelle ausgeführt wird.

Beachten Sie, dass Sie die Zelle mit Run Cells (ausführen müssen, wenn Sie Zelleingaben standardmäßig ausblenden.Ctrl+Return), nicht die Run Cells and Select/Insert Below Optionen. Dadurch wird das Verschieben der "ausgewählten" Beschriftung in die nächste Zelle vor dem Ausführen von JavaScript veranlasst, sodass Sie möglicherweise eine Zelle ausblenden, in der der Umschaltlink " hier klicken" nicht vorhanden ist seine Ausgabe. In diesem Fall müssen Sie inspizieren die Zelle durchgehen, durch die relevanten Tags navigieren und display='none'; In display='block'; Ändern.

Beachten Sie, dass dies am Ende jedes Codes in Ihrer Zelle stehen muss und dass Sie HTML-Code aus IPython.display importiert haben müssen, bevor Sie diesen Code ausführen können. Sie können dies tun, indem Sie ausführen

from IPython.display import HTML
7
Mathmagician

Für den Fall, dass jemand es hilfreich findet, alle Code-Zellen auszuschließen (was hier nicht gefragt wird), können Sie dieses Flag hinzufügen nbconvert --TemplateExporter.exclude_code_cell=True

4
shouldsee

In Bezug auf die Ausgabe gibt es im Jupiter-Notizbuch auch eine Option auf der Leiste: enter image description here Sie können die Ausgabe Clear oder mit Toggle verbergen. In beiden Fällen löschen Sie keine in der Zelle berechnete Variable.

4
G M

Ok, nach erfolglosen Versuchen gaben die Antworten hier an. Ich fand diese Erweiterung von kirbs . Hide_code nbextension Es funktioniert gut. Es wird jedoch empfohlen, Folgendes zu tun:

Stellen Sie zunächst sicher, dass Sie Ihren Jupyter, den Nbconverter, die Nbconverter-Erweiterungen und die Jupyter-Servererweiterung aktualisiert haben. Wenn Sie dies getan haben, können Sie in der Anaconda-Eingabeaufforderung (mit Administratorrechten geöffnet) Folgendes tun:

  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

Wenn Sie zum Öffnen Ihrer Notizbücher die Anaconda-Distribution verwenden, müssen Sie außerdem die folgenden Befehle verwenden:

  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

Wenn bei der Ausführung dieser Befehle kein Fehler aufgetreten ist, können Sie die hier gezeigten Optionen für den Ausblendcode in der Symbolleiste anzeigen und verwenden:

Hide_code-Symbolleiste

Getan! Wenn Sie den Button zum Exportieren verwenden und voilá!

Export Button

Viel Glück

3
F4laF

Die @ Mathmagician-Lösung ist nahezu perfekt, hat aber viele Nebenwirkungen.

Richtiger wäre:

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

Der Anruf toggle_code als kann in einer Code-Zelle vor einem anderen Code platziert werden. Wenn Code in der Zelle also langsam ausgeführt wird, sind dies keine Nebenwirkungen. Es löst auch das Problem mit Run Cells und Select/Insert Below

Es fügt den Umschaltknopf hinzu, aber der Anfangszustand kann nicht verwaltet werden

1
Pan Yan