【问题标题】:Execute IPython notebook cell from python script从 python 脚本执行 IPython 笔记本单元
【发布时间】:2016-07-27 20:28:11
【问题描述】:

在 IPython 笔记本中,您可以使用运行魔法执行外部脚本,例如 test.py

%run test.py

有没有办法做相反的事情,即给定一个 IPython 笔记本,通过 python 脚本访问并运行其中的特定单元?

【问题讨论】:

  • IPython 的格式类似于 xml。你可以解析它并运行你想要的单元格。

标签: python ipython


【解决方案1】:

Jupyter(或 IPython)扩展名为“ipynb”的文件是 JSON 文件。并且单元格的名称为“单元格”[“单元格”]。然后选择单元格的编号 [0] 并获取源选择“源”[“源”]。作为回报,您会得到一个包含一个元素的数组,因此您需要获取第一个元素 [0]。

>>> import json
>>> from pprint import pprint
>>> with open('so1.ipynb', 'r') as content_file:
...     content = content_file.read()
... 
>>> data=json.loads(content)
>>> data["cells"][0]["source"][0]
'1+1'
>>> eval(data["cells"][0]["source"][0])
2
>>> data["cells"][1]["source"][0]
'2+2'
>>> eval(data["cells"][1]["source"][0])
4

编辑:

在具有 %run 的单元格中运行其他 python 脚本:

os.system(data["cells"][2]["source"][0].replace("%run ",""))

如果您有 -i 选项,则将其替换为以下内容:

execfile(data["cells"][2]["source"][0].replace("%run -i ",""))

请参阅Run a python script from another python script, passing in args 了解更多信息。

【讨论】:

  • 谢谢。如果说该单元格中包含特定于 jupyter/ipython 的魔法,我能做些什么,例如 %run?
  • 嗨,我有一个绘制图表的笔记本,当我使用这种方法执行该单元格时,我没有得到任何输出。有什么解决办法吗?
  • 要检查的东西:最后是否有 plt.show(),是否使用了兼容的 matplotlib 后端。 Jupyter 中使用的交互式后端与普通 python 不兼容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
相关资源
最近更新 更多