2017-05-25 3 views
3

Innerhalb von Jupyter gibt es zwei Optionen, um Notizbücher in andere Formate zu exportieren, indem nbconvert entweder in der Befehlszeile oder als Bibliothek verwendet wird. Bei beiden müssen Sie das ursprüngliche Notizbuch als Eingabe übergeben (entweder als Dateiname oder als JSON-Daten).Alle Zellendaten aus dem aktuellen Jupyter-Notizbuch extrahieren

Was ich tun möchte, ist im Wesentlichen automatische, in sich geschlossene Berichtserstellung, d. H. Verwenden Sie die nbconvert-Bibliothek in einem Notebook, um das gleiche Notebook bei der Ausführung in HTML/PDF zu exportieren. Ich stelle mir den Exportcode in der letzten Zelle des Dokuments vor, mit Anweisungen, die letzte Zelle beim Export zu ignorieren.

Mein Problem besteht darin, die Daten zu bekommen. Innerhalb des Notebooks kann ich auf die Code-Zellen über In[1], Out[2] usw. zugreifen, aber AFAIK gibt es keine solche Funktionalität für Markdown-Zellen. Es gibt auch keine (offizielle) Methode, den Namen des Notebooks zu erfassen (kein __file__ Attribut), um Informationen auf diese Weise weiterzugeben.

Es gibt viele Beispiele, um alle Zellendaten anderer Notebooks zu erfassen - aber gibt es eine Möglichkeit, auf alle Zellendaten des aktuellen Notebooks zuzugreifen?

Antwort

1

Sie können dies mit dem Notebook-Dateinamen und Nbconvert tun, wie Sie vermuten. Einige Client-Seiten benötigen Erweiterungen, eine, die ich mir vorstellen kann, ist eine Servererweiterung für die Konvertierung und ein bisschen JS schreibt man in die letzte Code-Zelle, die zum Beispiel eine Schaltfläche rendert und das Notebook zurück zur Konvertierung stellt Servererweiterung. Bestimmte Zellen (z. B. die Js-Zelle) können Sie in der convert-Erweiterung oder mit Zellenmetadaten und nbconvert-Vorlagen ausblenden. Angesichts der Flexibilität der Architektur gibt es einige Möglichkeiten, dies zu tun

+0

Danke Tim. Du hast natürlich recht, ich könnte nbconvert mit einem übergebenen Dateinamen verwenden. Ich glaube, ich habe es auf meine Art und Weise versucht (will Zugang zu den Zellendaten), so dass ich die volle Kontrolle über z. die Zellen, die in den Bericht geschrieben werden, sowie Name und Speicherort des Berichts. AFAIK Die nbconvert-Route würde erfordern, dass das Berichtsdokument denselben Namen und denselben Pfad wie das Notizbuch hat (und dass das Notebook seinen eigenen Namen kennt, etwas, das sich leicht ändern kann, wenn das Notizbuch weitergegeben wird). – blackgore

+0

Also meine Lösung in diesem Fall wäre, etwas Javascript zu schreiben, um Metadaten zum Notizbuch json auf dem Klienten zu addieren (dh schreiben Sie ein Formular für Dateistandort, welche Zellen, usw. zu speichern), dann das Notizbuch json zu einer kundenspezifischen Servererweiterung senden und parsen Sie die Metadaten, und geben Sie diese dann an nbconvert unter Verwendung von benutzerdefinierten Vorlagen/Vorverarbeitung des Notebook-JSON nach Bedarf weiter. –