【发布时间】:2016-07-27 20:28:11
【问题描述】:
在 IPython 笔记本中,您可以使用运行魔法执行外部脚本,例如 test.py:
%run test.py
有没有办法做相反的事情,即给定一个 IPython 笔记本,通过 python 脚本访问并运行其中的特定单元?
【问题讨论】:
-
IPython 的格式类似于 xml。你可以解析它并运行你想要的单元格。
在 IPython 笔记本中,您可以使用运行魔法执行外部脚本,例如 test.py:
%run test.py
有没有办法做相反的事情,即给定一个 IPython 笔记本,通过 python 脚本访问并运行其中的特定单元?
【问题讨论】:
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 了解更多信息。
【讨论】: