【问题标题】:Save an IPython notebook programmatically from within itself?从内部以编程方式保存 IPython 笔记本?
【发布时间】:2015-08-26 21:49:06
【问题描述】:

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

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

我可以轻松编码的复制位,但我不确定如何让 IPython 笔记本以编程方式保存自己?这可能吗?提前致谢!

【问题讨论】:

  • 保存是从笔记本网络界面完成的,内核并不知道。但是你可以创建一个displays Javascript 的单元格来调用前端保存函数。
  • 使用 IPython from IPython.display import display,Javascript display(Javascript('IPython.notebook.save_checkpoint();'))
  • @Taar,谢谢!这就是我一直在寻找的答案;如果是答案,将接受作为答案!

标签: python ipython ipython-notebook jupyter ipython-magic


【解决方案1】:

我正在接受@Taar 的评论并将其作为实际答案,因为它对最初提出问题的人和我自己都有效。

from IPython.display import display, Javascript
display(Javascript('IPython.notebook.save_checkpoint();'))

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

注意:在 Jupyter 中,CTRL-s 触发异步进程,文件保存实际上仅在几秒钟后完成。如果您想在笔记本中进行阻塞保存操作,请使用这个小功能(file_path 是笔记本文件的路径):

import time
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()

【讨论】:

  • 如果我从命令行运行它(在我不是当前使用笔记本的用户的远程服务器上)我如何指定要保存的笔记本?
  • @zozo,我没有想法。注意:您的问题完全不同,因为您试图从外部保存笔记本,我建议您打开另一个新问题。
  • 这在使用 JupyterLab 界面时不起作用,请参阅here。 (另外我认为代码应该是import time,而不是from time import sleep。)
  • 不幸的是,这不适用于 Jupyter Lab (3.2.5):我收到 Javascript Error: IPython is not defined
【解决方案2】:

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

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

%notebook -e foo.ipynb

在你希望它发生的时候

【讨论】:

  • 请注意,这会将您的历史记录保存为新笔记本。如果您从头到尾运行了笔记本,而没有重新运行任何单元格并在最后运行它,那将是您所期望的。如果您重新运行或重新排序任何单元格,它可能不会执行您想要的操作。
  • or1426,谢谢,但由于某种原因,我没有在 foo.ipynb 中得到输出,有什么办法吗?
  • 有没有办法动态添加保存路径?例如%notebook path_variable_from_runtime\name.ipynb
  • 如果some_python_var是你想要的路径的python变量,你可以%notebook $some_python_var
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
相关资源
最近更新 更多