如何用Python自动检测并依次运行指定文件夹中的ipynb文件?
解决方案
%run是Jupyter Notebook专属的魔法命令,无法直接在普通Python循环中调用。要批量运行指定文件夹内的ipynb文件,推荐两种可靠实现方式:
方式一:使用nbconvert(官方工具)
nbconvert是Jupyter官方提供的工具,可通过Python API调用实现ipynb文件的批量执行。
示例代码:
import glob from nbconvert.preprocessors import ExecutePreprocessor from nbformat import read, write # 匹配目标文件夹下所有ipynb文件 ipynb_files = glob.iglob("/Users/your_target_path/*.ipynb") for file_path in ipynb_files: # 读取ipynb文件内容 with open(file_path, 'r', encoding='utf-8') as f: nb = read(f, as_version=4) # 初始化执行处理器,timeout=-1表示不限制运行时长 ep = ExecutePreprocessor(timeout=-1, kernel_name='python3') try: # 执行笔记本代码 ep.preprocess(nb, {'metadata': {'path': './'}}) # 保存执行后的结果(不需要保留结果可删除此步骤) with open(file_path, 'w', encoding='utf-8') as f: write(nb, f) print(f"执行完成:{file_path}") except Exception as e: print(f"执行失败:{file_path},错误信息:{str(e)}")
前置依赖安装:
pip install nbconvert jupyter_client
方式二:使用papermill(轻量化批量工具)
papermill是专门针对Jupyter Notebook批量执行的工具,语法更简洁,支持参数化运行。
示例代码:
import glob import papermill as pm # 匹配目标文件夹下所有ipynb文件 ipynb_files = glob.iglob("/Users/your_target_path/*.ipynb") for file_path in ipynb_files: try: # 执行笔记本,output_path可指定新路径避免覆盖原文件 pm.execute_notebook( input_path=file_path, output_path=file_path, kernel_name='python3' ) print(f"执行完成:{file_path}") except Exception as e: print(f"执行失败:{file_path},错误信息:{str(e)}")
前置依赖安装:
pip install papermill
原方法失效原因
%run是Jupyter内核上下文专属的魔法命令,不属于标准Python语法,因此无法在普通循环中直接调用,必须借助专门的库处理ipynb文件的执行逻辑。
内容的提问来源于stack exchange,提问作者Cla Rosie
相关产品推荐
相关产品推荐

