2016-07-27 74 views
2

执行IPython的笔记本电池在IPython的笔记本,你可以执行一个外部脚本,说test.py,使用运行魔法:从python脚本

%run test.py 

有没有办法做相反,即给予的IPython笔记本,从python脚本访问并运行其中的特定单元?

+0

IPython有一个像xml一样的格式。你可以解析它并运行你想要的单元格。 –

+0

我知道,但如何? – Alex

+0

请帮忙吗? – Alex

回答

2

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

编辑:

要在有跑%运行细胞其他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

+0

谢谢。如果说单元格中有jupyter/ipython特定的魔法,比如%run,有什么我可以做的吗? – Alex

+0

我编辑了答案。 –