如何批量将.ipynb中Scheme类型可执行代码单元格转为Markdown代码块
批量转换Jupyter Notebook中Scheme代码单元格为Markdown代码块
不用写复杂正则,直接操作.ipynb的JSON结构就能搞定,步骤如下:
原理
Jupyter Notebook本质是JSON格式文件,所有单元格都存储在cells数组中。代码单元格的cell_type字段值为code,我们只需识别其中的Scheme代码单元格,将其类型改为markdown,并把代码内容包裹成Markdown的Scheme代码块格式即可。
具体实现(Python脚本)
import json # 替换成你的源Notebook路径和输出路径 src_notebook = "your_notebook.ipynb" dst_notebook = "converted_notebook.ipynb" # 读取Notebook文件 with open(src_notebook, "r", encoding="utf-8") as f: nb_data = json.load(f) # 遍历所有单元格进行转换 for cell in nb_data["cells"]: if cell["cell_type"] != "code": continue # 判断是否为Scheme代码单元格,可根据实际情况调整判断逻辑 is_scheme_cell = False # 方式1:检查单元格元数据中的语言标记(如果有) if "language" in cell.get("metadata", {}) and cell["metadata"]["language"].lower() == "scheme": is_scheme_cell = True # 方式2:根据代码内容特征判断(比如包含(define ...)这类Scheme语法) elif any(line.strip().startswith("(") and "define" in line.strip() for line in cell["source"]): is_scheme_cell = True if is_scheme_cell: # 转换为Markdown代码块 cell["source"] = ["```scheme\n"] + cell["source"] + ["\n```"] cell["cell_type"] = "markdown" # 移除代码单元格特有的属性 cell.pop("execution_count", None) cell.pop("outputs", None) # 保存转换后的Notebook with open(dst_notebook, "w", encoding="utf-8") as f: json.dump(nb_data, f, indent=2)
注意事项
- 备份原文件:转换前务必复制一份原.ipynb文件,防止操作失误导致数据丢失。
- 调整判断逻辑:如果你的Scheme代码单元格有特殊标识(比如元数据里的其他字段),可以修改脚本中的判断条件,确保准确识别目标单元格。
- 验证转换结果:运行脚本后,打开生成的
converted_notebook.ipynb,检查所有Scheme代码是否都正确转为Markdown代码块。
内容的提问来源于stack exchange,提问作者Yiffany
相关产品推荐
相关产品推荐

