如何通过编程方式保存Jupyter Notebook(iPython笔记本)?

6
我想通过代码块保存笔记本(就像单击工具栏中的“磁盘”图标一样)。原因是我想通过%%bash魔法使用nbconvert保存HTML和幻灯片版本,但它只能将磁盘上的内容转换而不能转换正在运行的内容。我不希望每次保存时都执行此操作(可以进行某些设置),而是只选择性地为我的一些笔记本执行。我想要能够“运行所有”,并且最后几个单元格会创建反映当前屏幕上新数据的其他文件。我尝试过%save%notebook魔法,但似乎都无法完全满足我的需求。有没有办法做到这一点?
3个回答

5
一种不正规的方法是使用%%javascript笔记本魔法来运行命令。
require(["base/js/namespace"],function(Jupyter) {
    Jupyter.notebook.save_checkpoint();
});

这将访问全局笔记本实例(在笔记本页面时,这是当前笔记本),并手动触发保存和检查点。

谢谢这个...它很聪明,而且完成了工作。 - kpmartin
1
我们可以指定笔记本保存的文件夹路径和文件名吗?谢谢。 - Confounded

4
这是 @louise-davies 回答的可重复使用版本,以 Python 函数的形式呈现;
from IPython.display import Javascript

script = '''
require(["base/js/namespace"],function(Jupyter) {
    Jupyter.notebook.save_checkpoint();
});
'''

def notebook_save():
    Javascript(script)
    print('This notebook has been saved')

更新:

我认为之前的解决方案已经失效,但最近更新了jupyter笔记本。似乎无法在函数内调用Javascript。然而,如果在函数上下文之外调用,它仍然可以工作。

from IPython.display import Javascript

script = '''
require(["base/js/namespace"],function(Jupyter) {
    Jupyter.notebook.save_checkpoint();
});
'''
Javascript(script)

0

另一个选项是使用%%avascript和JQuery:

%%javascript
$("#save-notbook button").trigger('click');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接