从一个Jupyter笔记本的代码单元中加载代码到另一个Jupyter笔记本

时间:2020-05-19 11:07:13

标签: python jupyter-notebook jupyter

我想将代码从一个jupyter笔记本中的代码单元加载(即与%load一样复制代码)到另一个jupyter笔记本中(Jupyter运行Python,但不确定是否重要)。我真的很想输入类似

%load cell[5] notebookname.ipynb

该命令会将notebookname.ipynb单元5中的所有代码复制到我正在处理的笔记本的代码单元中。有人知道如何做到这一点吗?

2 个答案:

答案 0 :(得分:0)

适应在Jupyter Notebook here中找到的一些代码,以下内容将显示指定笔记本中特定单元格的代码:

import io
from nbformat import read

def print_cell_code(fname, cellno):
    with io.open(fname, 'r', encoding='utf-8') as f:
        nb = read(f, 4)
    cell = nb.cells[cellno]
    print(cell.source)

print_cell_code("Untitled.ipynb",2)

不确定代码一旦准备好要做什么,但是也许可以适应您的需求。尝试print(nb.cells)来看看read带来了什么。

答案 1 :(得分:0)

您可能要使用或编写自己的nbconvert预处理器来从一个单元格中提取一个单元格并插入另一个单元格中。对这些文档进行了大量研究,以了解如何编写预处理器,但这是首选方法。

您拥有的快速修复选项是nbformat规范基于JSON,这意味着如果您使用纯python(即,使用ipynbopen来读取read文件),您可以对其调用json.loads,将整个文件转换为dict。从那里,您可以访问cells条目中的单元格(这是一个list单元格)。所以,像这样:

import json

with open("nb1.ipynb", "r") as nb1, open("nb2.ipynb", "r") as nb2:
    nb1, nb2 = json.loads(nb1.read()), json.loads(nb2.read())
    nb2["cells"].append(nb1["cells"][0]) # adds nb1's first cell to end of nb2

这假设(与您的问题相同),笔记本之间没有元数据冲突。