从python脚本执行IPython notebook单元

时间:2016-07-27 20:28:12

标签: python ipython

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

%run test.py

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

1 个答案:

答案 0 :(得分:2)

具有扩展名的文件" ipynb" Jupyter(或IPython)是一个JSON文件。而细胞的名称是"细胞" ["细胞&#34]。然后你选择单元格的编号[0]并让源选择" source" ["源&#34]。作为回报,您将得到一个包含一个元素的数组,因此您需要获取第一个元素[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