Python 开发中:.ipynb
(Jupyter Notebook 文件)和 .py
(Python 脚本文件)
一、.ipynb
文件中的代码单元格合并成一个.py
文件
在 Python 开发中,源码常用两种文件:.ipynb
(Jupyter Notebook 文件)和 .py
(Python 脚本文件),通常先用.ipynb
文件进行原型开发,再用 .py
文件做成产品。在这两阶段之间,需要一个软件资产转换,为此,这里为你提供一个非常适用的程序ipynb2py.py:它将.ipynb
文件中的代码单元格合并成一个.py
文件。
python
# 程序名:ipynb2py.py
import json
import argparse
import os
def extract_code_from_ipynb(ipynb_path, output_path=None):
"""
从.ipynb文件中提取代码单元格并合并为.py文件
参数:
ipynb_path (str): Jupyter Notebook文件路径
output_path (str, optional): 输出Python文件路径,默认为原文件名加.py后缀
"""
# 如果未指定输出路径,则使用输入文件的名称创建输出路径
if output_path is None:
base_name = os.path.splitext(os.path.basename(ipynb_path))[0]
output_path = f"{base_name}.py"
try:
# 读取并解析.ipynb文件(本质是JSON格式)
with open(ipynb_path, 'r', encoding='utf-8') as f:
notebook_data = json.load(f)
# 提取所有代码单元格
code_cells = []
for cell in notebook_data.get('cells', []):
if cell.get('cell_type') == 'code':
# 提取单元格中的代码内容
code = ''.join(cell.get('source', []))
code_cells.append(code)
# 拼接所有代码,添加分隔注释以便区分不同单元格
separator = "\n\n# " + "="*50 + "\n# 代码单元格分隔线\n# " + "="*50 + "\n\n"
combined_code = separator.join(code_cells)
# 写入到Python文件
with open(output_path, 'w', encoding='utf-8') as f:
f.write(combined_code)
print(f"成功提取代码!共处理 {len(code_cells)} 个代码单元格")
print(f"输出文件: {os.path.abspath(output_path)}")
return True
except FileNotFoundError:
print(f"错误: 找不到文件 '{ipynb_path}'")
except json.JSONDecodeError:
print(f"错误: 文件 '{ipynb_path}' 不是有效的JSON格式,可能不是ipynb文件")
except Exception as e:
print(f"处理过程中发生错误: {str(e)}")
return False
if __name__ == "__main__":
# 设置命令行参数解析
parser = argparse.ArgumentParser(description='提取Jupyter Notebook中的代码并保存为Python文件')
parser.add_argument('input_file', help='输入的.ipynb文件路径')
parser.add_argument('-o', '--output', help='输出的.py文件路径(可选)')
args = parser.parse_args()
# 执行提取操作
extract_code_from_ipynb(args.input_file, args.output)
这个程序的主要功能和特点:
-
工作原理:
- Jupyter Notebook文件本质上是JSON格式,程序会解析这个JSON
- 筛选出类型为"code"的单元格
- 提取这些单元格中的代码内容并进行合并
- 将合并后的代码写入到指定的Python文件
-
使用方法:
- 基本用法:
python ipynb2py.py your_notebook.ipynb
- 指定输出文件:
python ipynb2py.py your_notebook.ipynb -o output.py
- 基本用法:
-
额外功能:
- 在不同代码单元格之间添加了分隔线注释,方便区分原始的代码块
- 包含错误处理,如文件不存在、JSON格式错误等情况
- 自动处理编码问题,确保中文等特殊字符正常显示
运行程序后,你会得到一个包含Notebook中所有代码的Python文件,方便进行代码复用或版本控制。
二、二者的区别与选用
在 Python 开发中,.ipynb
(Jupyter Notebook 文件)和 .py
(Python 脚本文件)是两种常用的文件格式,它们的设计目标、使用场景和特性有显著区别,选择哪种格式取决于具体需求。
1、区别
维度 | .ipynb (Jupyter Notebook) |
.py (Python 脚本) |
---|---|---|
文件格式 | 本质是 JSON 格式文件,包含代码、文本、图片等多种内容 | 纯文本文件,仅包含 Python 代码和注释 |
结构 | 由「单元格(Cell)」组成,可包含代码、Markdown 文本、公式等 | 线性结构,代码按顺序从上到下执行 |
交互性 | 支持「分步执行」(每个单元格可单独运行),实时查看结果 | 必须「整体执行」,需通过 print 或日志查看输出 |
可视化 | 内置支持图片、图表、HTML 等富文本展示(如 Matplotlib 图表直接嵌入) | 需将可视化结果保存为文件,或通过终端/IDE 间接查看 |
版本控制 | 因包含大量格式信息(如单元格元数据),Git 等工具难以高效对比差异 | 纯代码文本,版本控制(如 Git)友好,易对比修改记录 |
执行环境 | 依赖 Jupyter 环境(Notebook/Lab)运行 | 可通过 Python 解释器直接运行(python filename.py ) |
2、适用场景
优先选 .ipynb
的场景
-
数据分析与可视化
例如用 Pandas 处理数据、Matplotlib/Seaborn 绘图时,
.ipynb
可分步执行代码,实时查看中间结果(如表格、图表),并通过 Markdown 记录分析思路,形成「可执行的报告」。 -
机器学习/深度学习实验
训练模型时,可分步运行数据预处理、模型定义、训练、评估等代码,方便调试中间过程(如查看数据分布、调整参数后重新运行某一步)。
-
教学与演示
适合编写教程或课件:用 Markdown 单元格写说明文字,代码单元格实时运行展示效果,还可插入公式(LaTeX)、图片,让内容更易懂。
-
快速原型验证
验证一个想法时(如测试一段算法逻辑),
.ipynb
支持快速修改并运行单个单元格,无需重新执行整个脚本,效率更高。
优先选 .py
的场景
-
开发可复用的程序/工具
例如编写一个命令行工具、Web 应用(如 Flask/Django 项目)或自动化脚本(如定时任务),
.py
的线性结构更适合组织逻辑,且可直接通过 Python 解释器执行。 -
编写模块/库
当代码需要被其他程序导入(如
import mymodule
)时,必须用.py
格式,因为.ipynb
无法被 Python 解释器识别为模块。 -
大型项目与团队协作
大型项目代码量多、逻辑复杂,
.py
的结构化组织(如函数、类、包)更便于维护,且版本控制工具(如 Git)能清晰追踪代码修改,而.ipynb
的元数据会干扰差异对比。 -
需要自动化执行的场景
例如通过脚本定时运行任务(如爬虫、数据备份),
.py
可直接通过命令行调用(python script.py
),或集成到调度工具(如 Crontab)中,而.ipynb
需要额外工具(如nbconvert
)转换后才能执行。
3、总结
.ipynb
是「交互式笔记本」,擅长分步执行、可视化展示、记录思路,适合数据分析、实验、教学等场景。.py
是「纯代码脚本」,擅长结构化编程、模块复用、自动化执行,适合开发程序、库、大型项目等场景。
实际开发中,两者也可配合使用:例如用 .ipynb
做实验和分析,再将成熟的逻辑整理到 .py
文件中作为正式代码。
三、各自的常用编程工具
.ipynb
(Jupyter Notebook)和 .py
(Python 脚本)因使用场景不同,常用的工具也各有侧重,以下是两者最常用的工具及特点:
1、.ipynb
(Jupyter Notebook)常用工具
.ipynb
文件的核心是「交互式运行」和「富文本展示」,因此工具多围绕这两个特点设计,且大多支持 Jupyter 内核(可运行代码单元格并展示结果)。
-
Jupyter Notebook(官方基础工具)
- 最经典的
.ipynb
编辑工具,基于浏览器运行,界面简洁,支持代码单元格、Markdown 单元格分离,可实时运行代码并展示结果(如表格、图表)。 - 适合:本地快速启动,轻量数据分析、教学演示。
- 启动方式:命令行输入
jupyter notebook
。
- 最经典的
-
JupyterLab(官方增强版)
- Jupyter Notebook 的升级版,提供更强大的集成环境:支持多标签页、文件浏览器、终端、代码补全、实时协作等,界面更接近传统 IDE。
- 适合:复杂数据分析、多文件协同处理(如同时编辑
.ipynb
和.py
)。 - 启动方式:命令行输入
jupyter lab
。
-
Google Colab(在线免费工具)
- 谷歌提供的在线 Jupyter 环境,无需本地安装,直接在浏览器中编辑
.ipynb
,支持免费 GPU/TPU 加速(适合机器学习训练)。 - 优势:自带常用库(如 Pandas、TensorFlow),可直接关联 Google Drive 保存文件,方便分享和协作。
- 适合:快速实验、机器学习训练、跨设备访问。
- 谷歌提供的在线 Jupyter 环境,无需本地安装,直接在浏览器中编辑
-
VS Code(集成 Jupyter 功能)
- 主流代码编辑器,通过内置的「Jupyter 扩展」支持
.ipynb
编辑:可运行代码单元格、展示图表、支持 Markdown 渲染,同时保留 VS Code 的代码补全、调试等功能。 - 适合:习惯 VS Code 界面,需要同时处理
.ipynb
和.py
文件的场景。
- 主流代码编辑器,通过内置的「Jupyter 扩展」支持
-
PyCharm(专业版)
- 强大的 Python IDE,专业版原生支持
.ipynb
编辑:可运行单元格、查看结果,且集成了 PyCharm 的调试、重构等高级功能。 - 适合:在大型项目中同时管理
.ipynb
(实验代码)和.py
(正式代码)的开发者。
- 强大的 Python IDE,专业版原生支持
-
Kaggle Notebook(数据科学竞赛工具)
- 专注于数据科学的在线平台,基于 Jupyter 环境,内置大量数据集和竞赛资源,支持 GPU 加速,方便分享代码和结果。
- 适合:数据科学竞赛、公开数据集分析。
2、.py
(Python 脚本)常用工具
.py
文件的核心是「结构化编程」和「批量执行」,工具更侧重代码编辑效率、项目管理、调试和自动化运行。
-
VS Code(主流选择)
- 轻量且功能强大的编辑器,通过「Python 扩展」提供:代码补全、语法高亮、调试(断点、变量监视)、单元测试、虚拟环境管理等功能,支持直接在终端运行
.py
脚本。 - 优势:插件丰富(如 Git 集成、代码格式化),跨平台(Windows/macOS/Linux),适合个人开发者和中小型项目。
- 轻量且功能强大的编辑器,通过「Python 扩展」提供:代码补全、语法高亮、调试(断点、变量监视)、单元测试、虚拟环境管理等功能,支持直接在终端运行
-
PyCharm(专业版/社区版)
- 专为 Python 设计的 IDE,功能全面:
- 社区版(免费):支持基础编辑、调试、Git 集成,满足日常脚本开发;
- 专业版(付费):增加 Web 开发(Django/Flask)、数据库集成、远程开发等高级功能,适合大型项目。
- 适合:团队协作、复杂项目(如 Web 应用、Python 库开发)。
- 专为 Python 设计的 IDE,功能全面:
-
Sublime Text(轻量编辑器)
- 启动速度快,通过「Anaconda」等插件支持 Python 代码补全、语法检查,适合编写简单
.py
脚本或临时调试代码。 - 适合:追求轻量化、快速编辑的场景。
- 启动速度快,通过「Anaconda」等插件支持 Python 代码补全、语法检查,适合编写简单
-
终端/命令行工具
- 无需图形界面,直接通过
python script.py
或python3 script.py
运行.py
脚本,是自动化执行(如定时任务、服务器脚本)的基础工具。 - 常用终端:Windows 的 PowerShell、macOS/Linux 的 Terminal,配合
nohup
(后台运行)、crontab
(定时任务)等命令使用。
- 无需图形界面,直接通过
-
Spyder(科学计算友好)
- 专为数据科学设计的 IDE,界面类似 MATLAB,集成了 IPython 控制台、变量浏览器,支持
.py
脚本的编辑和运行,适合需要结合数值计算的场景。
- 专为数据科学设计的 IDE,界面类似 MATLAB,集成了 IPython 控制台、变量浏览器,支持
-
Vim/Neovim(命令行编辑器)
- 纯键盘操作的编辑器,通过
python-mode
等插件支持 Python 语法高亮、代码补全,适合习惯命令行操作或远程服务器开发的用户。
- 纯键盘操作的编辑器,通过
最最最常用的:
.ipynb
工具围绕「交互式运行+富文本」,核心是 Jupyter 系列(Notebook/Lab)VS Code(需集成 Jupyter);.py
工具围绕「结构化编程+批量执行」,核心是 VS Code、PyCharm。
实际使用中,VS Code 和 PyCharm 是「通吃型」工具,既能处理 .ipynb
也能高效编辑 .py
,适合大多数场景。