2016-07-27 61 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

我編輯了答案。 –