如何通过终端命令运行.ipynb文件中的指定代码单元格
在终端运行Jupyter Notebook的特定代码单元格
以下是两种可行的方案,帮你精准运行指定的代码单元格:
方案一:利用nbconvert + 自定义过滤脚本
nbconvert是Jupyter官方工具,通过自定义预处理脚本可以筛选出需要运行的单元格:
- 新建一个名为
filter_cells.py的脚本,内容如下:
from nbconvert.preprocessors import Preprocessor class CellFilter(Preprocessor): def __init__(self, keep_indices, **kwargs): super().__init__(**kwargs) # 索引从0开始计数,比如要运行第2、3个单元格,对应索引1和2 self.keep_indices = keep_indices def preprocess_cell(self, cell, resources, cell_index): # 只保留指定索引的代码单元格 if cell_index in self.keep_indices and cell.cell_type == 'code': return cell, resources else: # 移除不需要的单元格 return None, resources
- 在终端执行以下命令(替换
your_notebook.ipynb为你的文件名,[1,2]为要保留的单元格索引):
jupyter nbconvert --to notebook --execute --preprocessors filter_cells.CellFilter --preprocessor-args "keep_indices=[1,2]" your_notebook.ipynb --output temp_run.ipynb
执行后会生成包含指定单元格运行结果的临时文件temp_run.ipynb,若无需保留结果,可添加--no-input参数。
方案二:直接用Python脚本提取并运行单元格
如果不想依赖nbconvert,可以直接读取Notebook的JSON结构,提取代码并执行:
新建一个run_specific_cells.py脚本,内容如下:
import json def run_cells(notebook_path, cell_indices): with open(notebook_path, 'r', encoding='utf-8') as f: nb = json.load(f) for idx, cell in enumerate(nb['cells']): if idx in cell_indices and cell['cell_type'] == 'code': # 提取单元格代码 code = ''.join(cell['source']) # 执行代码 exec(code, globals()) if __name__ == '__main__': # 替换为你的Notebook路径和目标单元格索引(从0开始) run_cells('your_notebook.ipynb', [1, 2])
然后在终端运行:
python run_specific_cells.py
注意事项
- Jupyter Notebook的单元格索引从0开始计数,比如你说的「第2和第3个单元格」,对应的索引是
1和2,请根据实际情况调整。 - 如果单元格之间存在依赖(比如第3个单元格依赖第2个的变量),确保选中的索引包含所有依赖的单元格。
内容的提问来源于stack exchange,提问作者Tina
相关产品推荐
相关产品推荐

