You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求按字母顺序批量运行目录及子目录下的Jupyter Notebook并展示执行过程

请求按字母顺序批量运行目录及子目录下的Jupyter Notebook并展示执行过程

我完全懂你手动维护%run命令的痛苦——文件夹层级一多,简直是重复劳动的噩梦!下面给你一个实用的Python自动化脚本方案,完美满足你的所有需求:按字母顺序递归遍历所有子文件夹、串行执行Notebook(保证依赖顺序)、实时打印执行的文件路径,还能处理执行异常。

解决方案步骤

1. 核心思路

用Jupyter官方的nbconvert工具来批量执行Notebook,配合Python的文件遍历功能,实现递归查找、排序、串行执行的完整流程。nbconvert比手动用%run更稳定,适合自动化场景。

2. 完整脚本代码

创建一个名为run_all_notebooks.py的文件,把下面的代码复制进去:

import os
import subprocess

def run_notebooks_in_order(root_dir):
    # 递归收集所有.ipynb文件,排除临时检查点文件
    notebook_paths = []
    for dirpath, _, filenames in os.walk(root_dir):
        for filename in filenames:
            if filename.endswith('.ipynb') and not filename.startswith('.ipynb_checkpoints'):
                full_path = os.path.join(dirpath, filename)
                notebook_paths.append(full_path)
    
    # 按字母顺序排序文件路径
    notebook_paths.sort()
    
    # 逐个串行执行Notebook
    for idx, nb_path in enumerate(notebook_paths, 1):
        print(f"=== 正在执行第 {idx}/{len(notebook_paths)} 个Notebook: {nb_path} ===")
        try:
            # 使用nbconvert执行Notebook,执行后覆盖原文件(可按需修改输出方式)
            result = subprocess.run(
                [
                    "jupyter", "nbconvert", 
                    "--execute", "--inplace",
                    "--ExecutePreprocessor.timeout=-1",  # 取消超时限制,按需调整为具体秒数
                    nb_path
                ],
                capture_output=True,
                text=True
            )
            # 处理执行结果
            if result.returncode != 0:
                print(f"❌ 执行失败: {nb_path}")
                print("错误日志:")
                print(result.stderr)
                break  # 若需继续执行后续Notebook,将break改为continue
            else:
                print(f"✅ 执行成功: {nb_path}\n")
        except Exception as e:
            print(f"❌ 执行出错: {nb_path}")
            print(f"异常信息: {str(e)}\n")
            break

if __name__ == "__main__":
    # 替换为你的目标根目录路径,比如 "./my_notebooks" 或绝对路径
    target_root = "./"
    run_notebooks_in_order(target_root)

3. 脚本关键细节说明

  • 递归收集文件:os.walk会自动遍历根目录下所有子文件夹,同时过滤掉Jupyter生成的临时检查点文件,避免执行无效内容。
  • 严格字母排序:notebook_paths.sort()会按照文件路径的字母顺序排序,完全符合你要求的执行顺序。
  • 实时执行反馈:每执行一个Notebook都会打印当前进度、文件路径,成功/失败状态一目了然,方便你跟踪流程。
  • 异常处理:如果某个Notebook执行失败,脚本会打印详细错误日志,你可以选择停止执行或继续(修改break为continue即可)。
  • 超时控制:--ExecutePreprocessor.timeout=-1取消了执行超时限制,适合运行时间较长的Notebook;如果需要限制时长,把-1改成具体秒数即可。

4. 使用方法

  1. 把脚本放在你的目标根目录下(或者修改target_root为你的根目录绝对路径)。
  2. 打开终端,进入脚本所在目录,运行命令:
    python run_all_notebooks.py
    
  3. 之后就能实时看到每个Notebook的执行进度和状态了!

额外注意事项

  • 依赖路径问题:确保Notebook里读取输入文件的路径是正确的——优先用绝对路径,或者相对于根目录的相对路径,避免因执行目录变化导致找不到文件。
  • 自定义执行顺序:如果你的Notebook依赖关系不是严格按字母顺序,可在收集文件后手动调整排序逻辑(比如给依赖前置的文件加前缀,或者自定义排序规则)。
  • 保留原文件:脚本用了--inplace参数,执行后会覆盖原Notebook的输出;若要保留原文件,把--inplace改成--output=执行后的文件名.ipynb即可。

备注:内容来源于stack exchange,提问作者josepmaria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:19:00