Ich habe Folgendes, das mit IPython 2.0 funktioniert. Ich habe festgestellt, dass der Name des Notebooks als Wert des Attributs 'data-notebook-name'
im -Tag der Seite gespeichert ist. Die Idee ist also zunächst, Javascript zu bitten, das Attribut abzurufen - Javascript kann von einer Codezelle aus dank des %%javascript
-Zaubers aufgerufen werden. Dann ist es möglich, auf die Javascript-Variable durch einen Aufruf des Python-Kernels zuzugreifen, mit einem Befehl, der eine Python-Variable setzt. Da diese letzte Variable dem Kernel bekannt ist, kann sie auch in anderen Zellen abgerufen werden.
%%javascript
var kernel = IPython.notebook.kernel;
var body = document.body,
attribs = body.attributes;
var command = "theNotebook = " + "'"+attribs['data-notebook-name'].value+"'";
kernel.execute(command);
Aus einer Python-Codezelle
print(theNotebook)
Out[ ]: HowToGetTheNameOfTheNoteBook.ipynb
Ein Fehler dieser Lösung ist, dass wenn man den Titel (Namen) eines Notebooks ändert, dann scheint dieser Name nicht sofort aktualisiert zu werden (es gibt wahrscheinlich eine Art Cache), und es ist notwendig, das Notebook neu zu laden, um Zugriff auf den neuen Namen zu erhalten.
[Edit] Bei genauerer Betrachtung ist eine effizientere Lösung, nach dem Eingabefeld für den Namen des Notebooks zu suchen, anstelle des -Tags. Bei genauerem Hinsehen zeigt sich, dass dieses Feld die ID "notebook_name" hat. Es ist dann möglich, diesen Wert mit einem document.getElementById()
zu erfassen und dann denselben Ansatz wie oben zu verfolgen. Der Code wird, immer noch mit dem Javascript-Zauber, zu:
%%javascript
var kernel = IPython.notebook.kernel;
var thename = window.document.getElementById("notebook_name").innerHTML;
var command = "theNotebook = " + "'"+thename+"'";
kernel.execute(command);
Dann, von einer ipython-Zelle aus,
In [11]: print(theNotebook)
Out [11]: HowToGetTheNameOfTheNoteBookSolBis
Im Gegensatz zur ersten Lösung werden Änderungen des Notebooknamens sofort aktualisiert und es ist nicht erforderlich, das Notebook neu zu laden.
0 Stimmen
Was versuchst du damit zu tun? Designmäßig weiß der Kernel (der Teil, der Code ausführt) nichts über das Frontend (der Teil, der Notebooks öffnet).
7 Stimmen
Hallo, ich möchte es mit nbconvert verwenden, um den Prozess der automatischen Umwandlung des Notebooks in Latex/PDF zu automatisieren. Meine Notebooks werden remote ausgeführt. Nach einer Klasse können die Schüler eine PDF-Version ihrer Ergebnisse herunterladen.
1 Stimmen
P.Toccaceli's Antwort funktioniert gut mit den neuesten Versionen von JupyterLab (1.1.4) (Notebook 5.6.0) und erfordert kein Javascript.
2 Stimmen
Verwandt: github.com/jupyter/notebook/issues/1000#issuecomment-359875246
7 Stimmen
Einige haben die Arbeit gemacht und ein Pip-Paket erstellt: pypi.org/project/ipynbname installieren mit
pip install ipynbname
2 Stimmen
Ja,
ipynbname
funktioniert jetzt mit jupyter 3 (weitere Details hier)0 Stimmen
ipynbname
hat nicht auf Jupyter 4 funktioniert.