使用Python自动化创建与导出Jupyter Notebook

江岸
江岸
发布时间:2026-10-10 | 2人浏览过
原创

数据科学场景中常需自动化生成包含代码、Markdown及执行结果的交互文档。本文演示如何使用 nbformat 和 nbconvert 库通过 Python 脚本创建 Notebook 对象,配置单元格属性与模拟输出,最终将其稳定导出为可展示的 HTML 文件或可直接打开的 .ipynb 格式文件。

生成目标与准备工作

在某些自动化报告生成或教学材料分发场景中,手动编写 Notebook 效率较低。我们的目标是编写一段 Python 脚本,程序化地创建一个空的 Notebook 结构,依次注入代码单元格、Markdown 说明单元格及带有模拟执行结果的数据行,最后分别输出为供浏览器查看的 .html 静态文件和供编辑器打开的 .ipynb 源文件。

自动化生成的Jupyter Notebook基础结构示例
生成的Notebook将包含按序排列的代码与Markdown单元格

准备阶段需确保 Python 环境已就绪,并通过包管理器安装底层读写与转换组件:

pip install nbformat nbconvert

真实操作顺序

第1步:安装必要的环境依赖

目的:获取负责 Notebook 节点构建(nbformat)与格式转换(nbconvert)的标准接口。
操作:在终端执行上述 pip 命令。确认无报错后,即可在当前虚拟环境或系统环境中调用对应模块。

第2步:构建并填充Notebook对象

目的:初始化笔记本容器并按需追加不同内容类型的单元格。
入口:Python 交互环境或脚本文件头部。
动作与参数:
1. 调用 nbformat.v4.new_notebook() 创建空白对象。
2. 使用 nbformat.v4.new_code_cell(source) 定义代码,设置 execution_count 控制左侧显示的执行序号(如 In [1]:)。
3. 使用 nbformat.v4.new_markdown_cell(text) 插入说明文本。
4. 对于需展示运行结果的代码,追加 nbformat.v4.new_output(output_type='execute_result', data={'text/plain': '计算值'})。

import nbformat
from nbconvert import HTMLExporter

# 初始化笔记本
nb = nbformat.v4.new_notebook()

# 添加代码单元格 1
cell1 = nbformat.v4.new_code_cell("result1 = 2 + 2")
cell1.execution_count = 1
nb.cells.append(cell1)

# 添加代码单元格 2
cell2 = nbformat.v4.new_code_cell("result2 = 'Hello, Jupyter!'")
cell2.execution_count = 2
nb.cells.append(cell2)

# 添加 Markdown 单元格
md = nbformat.v4.new_markdown_cell("This is a markdown cell.")
nb.cells.append(md)

# 添加带模拟输出的代码单元格 3
cell3 = nbformat.v4.new_code_cell("result3 = result1 * 2\nresult3")
cell3.outputs.append(
    nbformat.v4.new_output(
        output_type='execute_result',
        data={'text/plain': '4'}
    )
)
cell3.execution_count = 3
nb.cells.append(cell3)

第3步:导出为HTML静态文件

目的:将内存中的 Notebook 节点序列化为浏览器可读的网页。
入口:nbconvert.HTMLExporter 类实例。
动作与参数:调用 .from_notebook_node(nb) 获取 HTML 字符串。该转换器会自动读取单元格的 execution_count 属性生成正确的 In [x]: 提示符样式,无需手动替换原始 HTML 片段。
完成状态:控制台打印保存成功提示。

# 实例化转换器
exporter = HTMLExporter()
(html_body, _) = exporter.from_notebook_node(nb)

# 写入文件
output_html = "output_notebook.html"
with open(output_html, "w", encoding="utf-8") as f:
    f.write(html_body)

print(f"HTML 已保存至 {output_html}")

第4步:保存为.ipynb交互文件

目的:保留完整的单元格结构、元数据与输出状态,便于后续在 Jupyter 环境中二次编辑。
动作与参数:直接调用 nbformat.write(nb, target_path) 进行序列化写入。
完成状态:目标路径出现 .ipynb 文件。

output_ipynb = "output_notebook.ipynb"
nbformat.write(nb, output_ipynb)
print(f"Notebook 已保存至 {output_ipynb}")
成功导出的HTML文件在浏览器中的渲染效果
导出后的HTML文件可直接拖入任意现代浏览器查看执行记录

完整运行脚本

将上述步骤整合为单一脚本,确保流程闭环:

import nbformat
from nbconvert import HTMLExporter

nb = nbformat.v4.new_notebook()

cell1 = nbformat.v4.new_code_cell("result1 = 2 + 2")
cell1.execution_count = 1
nb.cells.append(cell1)

cell2 = nbformat.v4.new_code_cell("result2 = 'Hello, Jupyter!'")
cell2.execution_count = 2
nb.cells.append(cell2)

md = nbformat.v4.new_markdown_cell("This is a markdown cell.")
nb.cells.append(md)

cell3 = nbformat.v4.new_code_cell("result3 = result1 * 2\nresult3")
cell3.outputs.append(
    nbformat.v4.new_output(
        output_type='execute_result',
        data={'text/plain': '4'}
    )
)
cell3.execution_count = 3
nb.cells.append(cell3)

# 导出 HTML
exporter = HTMLExporter()
(html_body, _) = exporter.from_notebook_node(nb)
with open("output_notebook.html", "w", encoding="utf-8") as f:
    f.write(html_body)
print("HTML 导出完成")

# 保存 IPYNB
nbformat.write(nb, "output_notebook.ipynb")
print("IPYNB 保存完成")

完成状态核对

脚本执行完毕后,当前工作目录下应同时存在 output_notebook.html 与 output_notebook.ipynb。
• 打开 HTML 文件:检查是否按顺序显示 In [1]: 至 In [3]: 的代码块,且第三行正确呈现输出结果 4。
• 双击 IPYNB 文件:若能以 Jupyter Notebook 或 VS Code 编辑器正常载入,且单元格内容与输出状态与预期一致,即视为操作成功。

注意事项与常见排错

• 风险提醒:脚本默认覆盖同名文件。若需生成多版本文档,请在 open() 或 nbformat.write() 前加入版本日期后缀或移动旧文件的逻辑,防止数据丢失。
• 权限拒绝(PermissionError):若保存在 C:/Program Files 等系统目录可能触发权限拦截,建议切换至用户主目录或项目根目录执行。
• 导入失败(ModuleNotFoundError):确认 nbformat 与 nbconvert 版本兼容。通常较新版本支持 v4/v5 协议,若遇到类型警告可忽略,不影响基础生成逻辑。

简要总结

利用 nbformat 提供的基础节点工厂与 nbconvert 的内置转换器,Python 开发者无需依赖图形界面即可完成 Notebook 的结构化拼装与多格式导出。合理设置 execution_count 即可让工具链自动处理排版细节,大幅简化批量报告与自动化脚本的输出流程。

以上就是使用Python自动化创建与导出Jupyter Notebook的详细内容,更多关于Python自动化生成Jupyter Notebook的操作资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表