我想将代码从一个jupyter笔记本中的代码单元加载(即与%load一样复制代码)到另一个jupyter笔记本中(Jupyter运行Python,但不确定是否重要)。我真的很想输入类似
%load cell[5] notebookname.ipynb
该命令会将notebookname.ipynb
单元5中的所有代码复制到我正在处理的笔记本的代码单元中。有人知道如何做到这一点吗?
答案 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(即,使用ipynb
和open
来读取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
这假设(与您的问题相同),笔记本之间没有元数据冲突。