从自身内部以编程方式保存IPython笔记本吗?

app*_*der 8 python ipython ipython-notebook ipython-magic jupyter

我想让IPython笔记本运行以进行一些计算并显示一些视觉效果。

IPython Notebook完成后,我希望IPython Notebook中的最后一个单元以编程方式保存IPython Notebook。然后,我想将笔记本(包含所有输出)复制到另一个目录中,以记录结果。

我可以轻松地编写复制位,但是我不确定如何获得IPython笔记本以编程方式保存自身?这可能吗?提前致谢!

or1*_*426 6

ipython 魔法命令%notebook将在这里为您提供帮助。它显示在此页面上(搜索 %notebook)。

要将当前笔记本历史记录保存到文件“foo.ipynb”,只需输入:

%notebook -e foo.ipynb
Run Code Online (Sandbox Code Playgroud)

当你希望它发生的时候

  • 请注意,这会将您的*历史记录*保存为新笔记本。如果您从头到尾运行笔记本而没有重新运行任何单元并在最后运行它,那么这将是您所期望的。如果您重新运行或重新排序任何单元格,它可能不会执行您想要的操作。 (4认同)

Rap*_*nns 5

我接受@Taar的评论,并使其成为实际答案,因为它适用于提出问题的原始人和我自己。

from IPython.display import display, Javascript
display(Javascript('IPython.notebook.save_checkpoint();'))
Run Code Online (Sandbox Code Playgroud)

这将创建检查点-与相同CTRL-s

注意:在Jupiter中,CTRL-s触发异步过程,并且文件保存实际上仅在几秒钟后完成。如果要在笔记本中执行阻止保存操作,请使用以下小功能(file_path是笔记本文件的路径):

from time import sleep
from IPython.display import display, Javascript
import hashlib

def save_notebook(file_path):
    start_md5 = hashlib.md5(open(file_path,'rb').read()).hexdigest()
    display(Javascript('IPython.notebook.save_checkpoint();'))
    current_md5 = start_md5

    while start_md5 == current_md5:
        time.sleep(1)
        current_md5 = hashlib.md5(open(file_path,'rb').read()).hexdigest()
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这不适用于 Jupyter Lab (3.2.5):我收到“Javascript 错误:IPython 未定义”。 (5认同)
  • 使用 JupyterLab 界面时这不起作用,请参阅[此处](https://github.com/jupyterlab/jupyterlab/issues/7627)。(另外,我认为代码应该读取“导入时间”,而不是“从时间导入睡眠”。) (3认同)