如何在Jupyter Notebook中加载另一 notebook 指定单元格的代码?
当然能实现这个需求!你可以自定义一个IPython魔法命令来搞定,步骤很简单:
第一步:自定义%load_cell魔法命令
先在你的Jupyter Notebook里运行下面这段代码,注册一个新的魔法命令:
import nbformat from IPython.core.magic import register_line_magic @register_line_magic def load_cell(line): # 拆分输入的参数:单元格序号 和 笔记本路径 parts = line.strip().split() if len(parts) != 2: print("正确用法:%load_cell 单元格序号 笔记本路径,比如 %load_cell 5 notebookname.ipynb") return cell_idx_str, nb_path = parts try: # 转成索引(Notebook的单元格是从0开始计数的,所以要减1) cell_idx = int(cell_idx_str) - 1 # 读取目标Notebook文件 nb = nbformat.read(nb_path, as_version=4) # 获取指定单元格 target_cell = nb.cells[cell_idx] # 检查是不是代码单元格 if target_cell.cell_type != 'code': print(f"注意:第{cell_idx+1}个单元格不是代码单元格,无法加载!") return # 替换当前单元格的内容为目标单元格的代码 ip = get_ipython() ip.set_next_input(target_cell.source) except ValueError: print("单元格序号必须是数字哦!") except IndexError: print(f"目标Notebook里没有第{cell_idx+1}个单元格!") except FileNotFoundError: print(f"找不到文件:{nb_path},请检查路径是否正确") except Exception as e: print(f"加载时出错:{str(e)}")
第二步:使用自定义魔法命令
注册完成后,你就可以在新的代码单元格里输入类似这样的命令:
%load_cell 5 notebookname.ipynb
运行这个单元格后,当前单元格的内容会自动替换成notebookname.ipynb里第5个代码单元格的所有代码。
一些小提示
- 如果目标Notebook和当前Notebook在同一个文件夹下,直接写文件名就行;不在同目录的话,要写相对路径或者绝对路径(比如
../folder/notebook.ipynb)。 - 如果想每次打开Jupyter都自动能用这个魔法命令,可以把上面的注册代码放到IPython的启动脚本里:找到你IPython配置文件夹下的
startup目录(一般是~/.ipython/profile_default/startup/),新建一个.py文件把代码放进去就行。 - 这个命令只会加载代码单元格,如果指定的单元格是Markdown或其他类型,会给出提示。
内容的提问来源于stack exchange,提问作者Mark Bakker
相关产品推荐
相关产品推荐

