它到底是什么文件?

.ipynb 文件是 Jupyter NotebookJupyterLab 这类交互式计算环境的原生文件格式。它的全称是 “IPython Notebook”,因为 Jupyter 项目最初是从 IPython 项目发展而来的。

简单来说,它不仅仅包含代码,更是一种能够混合代码、代码的运行输出、格式化文本(如说明、解释、数学公式)、图片、视频等多种元素的“笔记本”文件。它被设计用来支持交互式和可重复性的计算过程,特别是在数据分析、科学研究、机器学习、教育和文档编写等领域非常流行。

`.ipynb` 文件里面包含了什么?

`.ipynb` 文件的核心结构是基于 JSON(JavaScript Object Notation)格式的。这意味着你可以用任何文本编辑器打开它,看到的是结构化的文本数据,但直接编辑通常不推荐,除非你非常清楚 JSON 结构。

核心是单元格 (Cells)

一个 `.ipynb` 文件由一系列有序的“单元格”(cells)组成。每个单元格包含特定的类型和内容:

  • 代码单元格 (Code Cells):

    这里存放你可以执行的程序代码。最常见的是 Python 代码,但 Jupyter 支持通过安装不同的内核(Kernels)来运行其他语言的代码,比如 R、Julia、Scala 等等。当你运行一个代码单元格时,Jupyter 环境会将代码发送给关联的内核执行。

  • 文本单元格 (Markdown Cells):

    这些单元格用于编写格式化的文本,通常使用 Markdown 语法。你可以在这里添加标题、段落、列表、链接、图片,甚至数学公式(通过 LaTeX 语法)。这使得你可以在代码旁边直接提供解释、背景信息或分析结论,让整个文档更易于理解和分享。

  • 原始单元格 (Raw Cells):

    这是一种特殊类型的单元格,其中的内容不会被 Jupyter 处理或执行。它通常用于包含一些需要被转换工具(如 nbconvert)特殊处理的内容,比如直接嵌入的 LaTeX 或 ReStructuredText。

代码单元格的输出 (Outputs)

非常重要的一点是,当你在 Jupyter 环境中运行一个代码单元格后,它的输出(包括打印的文本、计算结果、图表、表格等)也会被捕获并嵌入到 `.ipynb` 文件中,紧跟在对应的代码单元格下方。这意味着 `.ipynb` 文件不仅保存了代码和说明,还保存了运行代码后的结果。

为什么大家喜欢使用 `.ipynb` 文件?

与传统的纯代码文件(如 `.py` 文件)相比,`.ipynb` 文件提供了独特的工作流程和优势:

  • 交互性: 你可以逐个单元格地运行代码,立即看到每一步的结果。这对于探索性编程、调试和理解代码非常方便。
  • 可解释性与叙事性: 将代码、输出和格式化文本结合在一起,你可以创建一个包含完整分析流程的文档。这就像在讲述一个故事,从数据加载到清理、分析、可视化和结论,每一步都有代码支持和文本解释。
  • 可重复性: 文件中包含的代码和生成这些代码输出的结果。理论上,只要环境相同,重新运行代码应该得到相同的输出,这有助于验证和分享你的工作。
  • 富媒体支持: 可以轻松嵌入各种可视化图表、图片、音频甚至视频,使得分析结果的呈现更加生动和直观。
  • 易于分享: `.ipynb` 文件本身就可以分享。许多平台(如 GitHub、nbviewer、Google Colab)可以直接渲染 `.ipynb` 文件,让其他人无需安装 Jupyter 就能查看内容和结果。

打开和使用 `.ipynb` 文件需要什么软件?

虽然 `.ipynb` 是 JSON 文件,可以用文本编辑器打开,但要真正地“使用”它(运行代码、编辑单元格、查看输出),你需要一个能够解释并运行它的环境。

  • Jupyter Notebook 或 JupyterLab: 这是官方和最常见的环境。你通常通过命令行启动一个本地服务器,然后在浏览器中打开一个界面来创建、编辑和运行 `.ipynb` 文件。
  • 集成开发环境 (IDE) 支持: 许多现代 IDE 提供了对 `.ipynb` 文件的内置或插件支持,例如 VS Code、PyCharm 等。你可以在这些 IDE 中直接打开 `.ipynb` 文件,并获得类似 Jupyter 环境的交互式体验。
  • 在线平台: 许多云平台提供基于 Jupyter 的在线环境,无需本地安装,只需浏览器即可使用。著名的例子包括:

    • Google Colaboratory (Colab)
    • Kaggle Kernels / Notebooks
    • Microsoft Azure Notebooks (已停止服务,但Azure ML等服务中包含类似环境)
    • 各种云服务商提供的 JupyterHub 或托管 Notebook 服务
  • 静态查看器: 有些工具或平台可以渲染 `.ipynb` 文件,只供查看(不能运行代码),比如 nbviewer 或 GitHub 对 `.ipynb` 文件的直接展示。

`.ipynb` 文件通常在哪里创建和保存?

创建 `.ipynb` 文件最常见的方式是在一个运行中的 Jupyter Notebook 或 JupyterLab 会话中。当你通过这些环境创建一个新的笔记本时,它就会被保存为一个 `.ipynb` 文件,通常保存在你启动 Jupyter 服务器时所在的目录或指定的目录下。

保存机制通常是自动的,Jupyter 会定期保存你的工作。你也可以手动通过菜单选项进行保存。

这些文件通常保存在你的本地文件系统中,就像其他文档或代码文件一样。当你使用在线平台时,文件则保存在该平台的云存储中。

如何创建和编辑 `.ipynb` 文件?

创建和编辑 `.ipynb` 文件通常是通过 Jupyter 的 Web 界面或支持 `.ipynb` 的 IDE 界面完成的。

创建:

  1. 启动你的 Jupyter 环境 (例如,在命令行输入 jupyter notebookjupyter lab)。
  2. 在文件浏览器界面中,点击 “New” 或 “+” 按钮。
  3. 选择你想要使用的内核 (例如,Python 3)。一个新的空的 `.ipynb` 文件就会在新的浏览器标签页中打开。

编辑:

在打开的 `.ipynb` 文件界面中:

  • 你会看到一个或多个单元格。
  • 点击一个单元格来选中它。
  • 双击一个单元格进入编辑模式。
  • 在单元格内输入你的代码或 Markdown 文本。
  • 选择单元格类型(Code, Markdown, Raw),通常通过工具栏上的下拉菜单。
  • 运行单元格: 点击工具栏上的 “Run” 按钮,或者使用快捷键 (Shift + Enter 是最常用的)。代码单元格的输出会直接显示在其下方;Markdown 单元格会渲染成格式化文本。
  • 你可以插入新的单元格 (通过菜单或工具栏按钮)。
  • 你可以剪切、复制、粘贴、删除、上移、下移单元格。
  • Jupyter 会自动保存你的更改,你也可以随时手动保存。

`.ipynb` 文件的内容是如何组织的?

如前所述,`.ipynb` 文件是 JSON 格式。其内部结构主要包含以下顶级键:

  • cells 这是一个 JSON 数组,包含文件中所有的单元格。数组中的每个元素代表一个单元格,是一个 JSON 对象。
  • metadata 这是一个 JSON 对象,包含整个笔记本的元数据,比如内核信息、文件格式版本、创建工具等。
  • nbformatnbformat_minor 表示 Notebook 格式的版本号,用于兼容性。

每个单元格对象(在 cells 数组中)至少包含:

  • cell_type 字符串,指明单元格的类型 (“code”, “markdown”, 或 “raw”)。
  • source 字符串或字符串数组,包含单元格的原始内容(代码或 Markdown 文本)。如果内容包含换行符,通常会存储为字符串数组,每行一个字符串。
  • 如果是代码单元格 ("cell_type": "code"),还会包含:

    • outputs 这是一个 JSON 数组,包含运行该单元格时产生的所有输出。每个输出也是一个 JSON 对象,包含输出类型(如 “stream” 表示标准输出/标准错误,”execute_result” 表示表达式的结果,”display_data” 表示富媒体输出,”error” 表示错误信息)及其对应的数据。
    • execution_count 一个整数,表示该单元格是当前会话中第几个被运行的单元格。
  • 每个单元格对象也可以有自己的 metadata 字段,包含该单元格特有的信息。

理解其 JSON 结构有助于理解为何文件会变大(因为它保存了输出),以及为什么版本控制(如 Git)难以有效处理 `.ipynb` 文件的差异(因为输出和执行计数会经常变化)。

如何与他人分享 `.ipynb` 文件?

分享 `.ipynb` 文件有几种方式,取决于你的目的:

  • 直接发送 `.ipynb` 文件: 你可以将 `.ipynb` 文件像其他文件一样通过电子邮件、云存储或文件共享服务发送给他人。接收者需要有 Jupyter 环境或兼容的软件才能打开和使用。
  • 使用在线平台:

    • GitHub/GitLab/Bitbucket: 这些代码托管平台可以直接渲染存储库中的 `.ipynb` 文件,显示代码、文本和输出(但不允许运行)。这是一种非常常见的分享只读结果的方式。
    • nbviewer: 这是一个由 Project Jupyter 提供的免费在线服务。你可以输入一个 `.ipynb` 文件的 URL (例如 GitHub 上的文件链接),nbviewer 就会将其渲染成一个漂亮的网页供任何人查看。
    • Google Colab, Kaggle 等: 如果你的工作是在这些平台上完成的,你可以直接分享笔记本的链接。其他人可以通过链接打开并在同一个在线环境中查看甚至运行代码。
  • 导出为其他格式: 如果你只是想分享结果或文档,而不是可交互的环境,可以将 `.ipynb` 文件导出为静态格式。

可以将 `.ipynb` 文件转换成其他格式吗?

是的,`.ipynb` 文件可以轻松地转换(导出)成多种静态或脚本格式,这通常通过 Jupyter 自带的 nbconvert 工具或在 Jupyter Notebook/Lab 界面中的 “File” -> “Download as” 菜单完成。

常见的转换目标格式包括:

  • HTML (.html): 将笔记本渲染成一个静态网页,保留代码、文本和输出。非常适合在线分享或发布到网站。
  • PDF (.pdf): 将笔记本转换成 PDF 文档。通常需要 LaTeX 安装作为后端。
  • Python脚本 (.py): 提取所有的代码单元格,忽略文本和输出,生成一个纯 Python 脚本文件。
  • Markdown (.md): 将文本单元格保留为 Markdown,将代码和输出格式化后嵌入到 Markdown 文件中。
  • 幻灯片 (.slides.html): 可以创建交互式演示文稿,每个单元格成为一页或一部分。
  • reStructuredText (.rst)

这些转换功能使得 `.ipynb` 文件不仅是一个工作环境,也是一个灵活的文档和报告生成工具。

ipynb是什么文件