在IPython笔记本中,您可以使用"run magic"执行外部脚本文件,比如
test.py
:%run test.py
有没有一种方法可以反过来做,即在Python脚本中访问并运行IPython笔记本中的特定单元格?
Jupyter(或IPython)的扩展名为“ipynb”的文件是JSON文件。单元格位于名称为“cells” ["cells"]的位置下。然后,选择单元格[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
编辑:
要在使用%run的单元格中运行其他Python脚本:
os.system(data["cells"][2]["source"][0].replace("%run ",""))
execfile(data["cells"][2]["source"][0].replace("%run -i ",""))
请查看如何在一个Python脚本中运行另一个带参数的Python脚本,以获取更多信息。