使用Python创建和导出Jupyter Notebook的完整教程

 更新时间:2026年01月12日 09:42:47   作者:weixin_46244623  
在数据科学和机器学习的工作中,Jupyter Notebook 已成为不可或缺的工具,不过,许多时候我们希望自动化生成 Notebook 文件,并将其导出为 HTML 或其他格式,这篇文章将带你通过 Python 来实现这一目标,需要的朋友可以参考下

引言

在数据科学和机器学习的工作中,Jupyter Notebook 已成为不可或缺的工具。它提供了一个交互式的环境,允许我们在文档中同时编写代码、展示图表以及添加文本说明。不过,许多时候我们希望自动化生成 Notebook 文件,并将其导出为 HTML 或其他格式,这篇文章将带你通过 Python 来实现这一目标。效果如下图所示

1. 背景

有时候,我们可能需要根据特定的需求自动生成包含代码单元格、Markdown 单元格和输出的 Jupyter Notebook 文件,并将其导出为 .html.ipynb 格式。为了完成这一任务,我们将使用 nbformatnbconvert 这两个 Python 库。

本文将为大家展示如何使用这两个库实现以下功能:

  • 创建新的 Jupyter Notebook。
  • 添加代码和 Markdown 单元格。
  • 为代码单元格添加执行计数。
  • 将 Notebook 导出为 HTML 文件。
  • 保存为 .ipynb 文件。

2. 安装必要的依赖

在开始之前,你需要安装以下两个库:nbformatnbconvert。你可以使用 pip 命令进行安装:

pip install nbformat nbconvert

3. 创建并修改 Notebook

接下来,我们将编写 Python 代码来生成一个 Jupyter Notebook,并为其添加代码单元格、Markdown 单元格以及带有执行结果的代码单元格。

import nbformat
from nbconvert import HTMLExporter

# 创建一个新的Jupyter Notebook
notebook = nbformat.v4.new_notebook()

# 添加代码单元格
code1 = "result1 = 2 + 2"
notebook.cells.append(nbformat.v4.new_code_cell(code1))

code2 = "result2 = 'Hello, Jupyter!'"
notebook.cells.append(nbformat.v4.new_code_cell(code2))

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

# 添加带有输出的代码单元格
code3 = "result3 = result1 * 2\nresult3"
notebook.cells.append(nbformat.v4.new_code_cell(code3))
notebook.cells[-1].outputs.append(nbformat.v4.new_output(
    output_type='execute_result',
    data={'text/plain': '4'},
))

# 为每个代码单元格添加执行计数
for i, cell in enumerate(notebook.cells):
    if cell.cell_type == 'code':
        cell['execution_count'] = i + 1

代码解释:

  1. 创建一个新的 Notebook:使用 nbformat.v4.new_notebook() 创建一个空的 Notebook 对象。
  2. 添加代码单元格:我们通过 nbformat.v4.new_code_cell() 向 Notebook 中添加代码单元格。例如,第一个代码单元格执行了简单的加法运算 result1 = 2 + 2
  3. 添加 Markdown 单元格:使用 nbformat.v4.new_markdown_cell() 向 Notebook 中添加 Markdown 单元格。Markdown 允许你在文档中插入文本、图片、数学公式等。
  4. 添加带有输出的代码单元格:最后,我们添加一个带有输出的代码单元格,这个单元格计算 result1 * 2,并返回结果 4

4. 导出为 HTML 文件

接下来,我们将使用 HTMLExporter 将 Notebook 转换为 HTML 格式,并确保插入类似 In [1]: 的执行计数。

# 将Notebook导出为HTML
html_exporter = HTMLExporter()
(body, _) = html_exporter.from_notebook_node(notebook)

# 插入带有执行计数的In [1]:等
lines = []
for line in body.split('\n'):
    if line.startswith('In '):
        lines.append(f'In [{line[4:]}')
    else:
        lines.append(line)

# 将HTML输出保存为文件
output_file_path_html = "output_notebook.html"
with open(output_file_path_html, "w", encoding="utf-8") as f:
    f.write('\n'.join(lines))

print(f"Jupyter Notebook HTML saved to {output_file_path_html}")

代码解释:

  • HTMLExporter:我们通过 HTMLExporter 将 Notebook 对象转换为 HTML 格式。from_notebook_node() 方法会返回 HTML 内容。
  • 插入执行计数:接着,我们遍历生成的 HTML 内容,将每个包含 In 的行转化为 In [1]: 这样的格式,以保证代码单元格的执行计数能够正确显示。
  • 保存为 HTML 文件:最后,我们将处理过的 HTML 内容保存到 output_notebook.html 文件中。

5. 将 Notebook 保存为.ipynb文件

除了导出为 HTML 格式,我们还需要将 Notebook 保存为 .ipynb 格式,这样可以方便地在 Jupyter Notebook 中打开。

# 将Notebook保存为.ipynb文件
output_file_path_ipynb = "output_notebook.ipynb"
nbformat.write(notebook, output_file_path_ipynb)

print(f"Jupyter Notebook .ipynb saved to {output_file_path_ipynb}")

代码解释:

  • nbformat.write():这行代码将 Notebook 对象保存为 .ipynb 格式的文件。

6. 完整代码

将上述所有代码整合在一起,形成完整的 Python 脚本:

import nbformat
from nbconvert import HTMLExporter

# 创建一个新的Jupyter Notebook
notebook = nbformat.v4.new_notebook()

# 添加代码单元格
code1 = "result1 = 2 + 2"
notebook.cells.append(nbformat.v4.new_code_cell(code1))

code2 = "result2 = 'Hello, Jupyter!'"
notebook.cells.append(nbformat.v4.new_code_cell(code2))

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

# 添加带有输出的代码单元格
code3 = "result3 = result1 * 2\nresult3"
notebook.cells.append(nbformat.v4.new_code_cell(code3))
notebook.cells[-1].outputs.append(nbformat.v4.new_output(
    output_type='execute_result',
    data={'text/plain': '4'},
))

# 为每个代码单元格添加执行计数
for i, cell in enumerate(notebook.cells):
    if cell.cell_type == 'code':
        cell['execution_count'] = i + 1

# 将Notebook导出为HTML
html_exporter = HTMLExporter()
(body, _) = html_exporter.from_notebook_node(notebook)

# 插入带有执行计数的In [1]:等
lines = []
for line in body.split('\n'):
    if line.startswith('In '):
        lines.append(f'In [{line[4:]}')
    else:
        lines.append(line)

# 将HTML输出保存为文件
output_file_path_html = "output_notebook.html"
with open(output_file_path_html, "w", encoding="utf-8") as f:
    f.write('\n'.join(lines))

print(f"Jupyter Notebook HTML saved to {output_file_path_html}")

# 将Notebook保存为.ipynb文件
output_file_path_ipynb = "output_notebook.ipynb"
nbformat.write(notebook, output_file_path_ipynb)

print(f"Jupyter Notebook .ipynb saved to {output_file_path_ipynb}")

7. 总结

通过本文的介绍,我们已经学会了如何使用 Python 创建和导出 Jupyter Notebook 文件。无论是将其保存为 .ipynb 格式以供后续使用,还是将其导出为 .html 格式进行展示,我们都可以通过简单的 Python 脚本来实现这一切。

以上就是使用Python创建和导出Jupyter Notebook的完整教程的详细内容,更多关于Python创建和导出Jupyter Notebook的资料请关注脚本之家其它相关文章!

相关文章

  • 关于python3安装pip及requests库的导入问题

    关于python3安装pip及requests库的导入问题

    小编最近快毕业了,闲着无事学习下python的内容在学习到requsets库的导入问题时遇到一些问题,通过查找相关资料问题顺利解决,今天小编把问题解决思路及注意事项分享给大家供大家参考学习
    2021-05-05
  • Python 网络爬虫--关于简单的模拟登录实例讲解

    Python 网络爬虫--关于简单的模拟登录实例讲解

    今天小编就为大家分享一篇Python 网络爬虫--关于简单的模拟登录实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Django开发的简易留言板案例详解

    Django开发的简易留言板案例详解

    这篇文章主要介绍了Django开发的简易留言板,结合实例形式详细分析了基于Python框架Django开发留言板的具体文件结构、流程步骤与相关操作技巧,需要的朋友可以参考下
    2018-12-12
  • Python的requests网络编程包使用教程

    Python的requests网络编程包使用教程

    requests包为Python扩展了各种基于HTTP的网络数据操作功能,包括各种请求与session和cookie等的追加,very强大,下面我们就来看一下Python的requests网络编程包使用教程
    2016-07-07
  • 忘记ftp密码的解决方法示例

    忘记ftp密码的解决方法示例

    忘记ftp密码了怎么办?下面介绍一个使用python ftplib库的方法,大家参考使用吧
    2014-01-01
  • Python实现根据日期获取当天凌晨时间戳的方法示例

    Python实现根据日期获取当天凌晨时间戳的方法示例

    这篇文章主要介绍了Python实现根据日期获取当天凌晨时间戳的方法,涉及Python针对日期与时间戳的相关转换、运算等操作技巧,需要的朋友可以参考下
    2019-04-04
  • python实现梯度法 python最速下降法

    python实现梯度法 python最速下降法

    这篇文章主要为大家详细介绍了python梯度法,最速下降法的原理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Django中文件上传和文件访问微项目的方法

    Django中文件上传和文件访问微项目的方法

    这篇文章主要介绍了Django中文件上传和文件访问微项目的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • ElasticSearch Python 使用示例详解

    ElasticSearch Python 使用示例详解

    这篇文章主要介绍了ElasticSearch Python 使用示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-04-04
  • 一文详细NumPy中np.zeros的使用

    一文详细NumPy中np.zeros的使用

    np.zeros是NumPy库中一个非常实用的函数,用于快速创建指定形状和大小的全零数组,本文主要介绍了NumPy中np.zeros的使用,感兴趣的可以了解一下
    2024-03-03

最新评论