Tengo lo siguiente que funciona con IPython 2.0. Observé que el nombre del cuaderno se almacena como el valor del atributo 'data-notebook-name'
en la <body>
etiqueta de la página. Por lo tanto, la idea es primero pedirle a Javascript que recupere el atributo: los javascripts se pueden invocar desde una celda de código gracias a la %%javascript
magia. Entonces es posible acceder a la variable de Javascript a través de una llamada al Kernel de Python, con un comando que establece una variable de Python. Dado que esta última variable se conoce del kernel, también se puede acceder a ella en otras celdas.
%%javascript
var kernel = IPython.notebook.kernel;
var body = document.body,
attribs = body.attributes;
var command = "theNotebook = " + "'"+attribs['data-notebook-name'].value+"'";
kernel.execute(command);
Desde una celda de código Python
print(theNotebook)
Fuera []: HowToGetTheNameOfTheNoteBook.ipynb
Un defecto en esta solución es que cuando se cambia el título (nombre) de un cuaderno, entonces este nombre parece no actualizarse inmediatamente (probablemente hay algún tipo de caché) y es necesario recargar el cuaderno para acceder a la nuevo nombre.
[Editar] Reflexionando, una solución más eficiente es buscar el campo de entrada para el nombre del cuaderno en lugar de la <body>
etiqueta. Al buscar en la fuente, parece que este campo tiene la identificación "notebook_name". Entonces es posible capturar este valor mediante document.getElementById()
ay luego seguir el mismo enfoque que el anterior. El código se convierte, todavía usando la magia de JavaScript
%%javascript
var kernel = IPython.notebook.kernel;
var thename = window.document.getElementById("notebook_name").innerHTML;
var command = "theNotebook = " + "'"+thename+"'";
kernel.execute(command);
Luego, desde una celda ipython,
In [11]: print(theNotebook)
Out [11]: HowToGetTheNameOfTheNoteBookSolBis
A diferencia de la primera solución, las modificaciones del nombre del portátil se actualizan de inmediato y no es necesario actualizar el portátil.