在IPython笔记本中,您可以使用run magic执行外部脚本,例如test.py
:
%run test.py
有没有办法做相反的事情,即给定一个IPython笔记本,从python脚本访问然后运行其中的特定单元格?
答案 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。