摘要:在日常数据分析和机器学习开发中,jupyter notebook 是一个非常好用的交互式开发工具。但在某些场景下,我们需要将 .ipynb 文件转换为纯 python 脚本文件(.py),以便于生产环境部署、代码版本管理或与其他开发者协作。本文将详细介绍 5 种将 jupyter notebook 转换为 python 文件的方法,涵盖图形界面、命令行、python 脚本、ide 工具等多种方式,总有一种适合你!
一、为什么要进行转换?
在正式开始之前,我们先来了解一下为什么需要将 .ipynb 转换为 .py:
| 场景 | 说明 |
|---|---|
| 生产环境部署 | jupyter notebook 不适合直接在生产服务器上运行,转换为 .py 后可以方便地部署和调度 |
| 代码版本管理 | .ipynb 文件包含大量 json 元数据,git diff 难以阅读,.py 文件更利于代码审查 |
| 团队协作 | 部分团队成员更习惯使用 pycharm、vs code 等 ide 开发纯 python 文件 |
| 纯文本编辑 | 有时需要在 vim、nano 等终端编辑器中快速查看或修改代码 |
| 模块化开发 | 将 notebook 中的代码整理为可复用的 python 模块 |
二、方法一:使用 jupyter notebook 自带功能(最简单)
如果你已经安装并打开了 jupyter notebook,这是最直接、最简单的方法。
操作步骤
- 打开你的 jupyter notebook 文件(
.ipynb) - 点击顶部菜单栏的 file → download as → python (.py)
- 浏览器会自动下载转换后的
.py文件到本地
操作示意图

优点
- ✅ 无需安装额外工具
- ✅ 一键操作,零门槛
- ✅ 保留代码结构
缺点
- ❌ 需要手动打开 jupyter notebook
- ❌ 不适合批量转换
- ❌ 无法自定义输出格式
三、方法二:使用命令行工具jupyter nbconvert(推荐)
nbconvert 是 jupyter 官方提供的命令行转换工具,功能强大,支持批量转换和多种格式。
1. 安装 jupyter(如未安装)
pip install jupyter
或安装 nbconvert 独立包:
pip install nbconvert
2. 基本转换命令
打开终端(windows 使用 cmd / powershell,macos/linux 使用 terminal),进入 .ipynb 文件所在目录,执行:
jupyter nbconvert --to script your_notebook.ipynb
示例:
# 进入文件目录 cd d:\projects\myproject # 执行转换 jupyter nbconvert --to script data_analysis.ipynb
3. 终端输出示例
[nbconvertapp] converting notebook data_analysis.ipynb to script [nbconvertapp] writing 15170 bytes to data_analysis.py
转换成功后,你会在同级目录下看到生成的 data_analysis.py 文件。
4. 批量转换多个文件
如果需要一次性转换目录下的所有 .ipynb 文件:
windows (powershell):
get-childitem *.ipynb | foreach-object { jupyter nbconvert --to script $_.name }macos / linux (bash):
for file in *.ipynb; do jupyter nbconvert --to script "$file"; done
5. 常用参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
--to script | 转换为 python 脚本 | jupyter nbconvert --to script file.ipynb |
--to python | 同上(script 的别名) | jupyter nbconvert --to python file.ipynb |
--output | 指定输出文件名 | jupyter nbconvert --to script file.ipynb --output myscript |
--stdout | 输出到标准输出(不保存文件) | jupyter nbconvert --to script file.ipynb --stdout |
--template | 使用自定义模板 | jupyter nbconvert --to script file.ipynb --template full |
优点
- ✅ 无需打开浏览器
- ✅ 支持批量转换
- ✅ 可集成到自动化脚本 / ci/cd 流程
- ✅ 支持自定义模板
缺点
- ❌ 需要记住命令
- ❌ 对新手有一定门槛
四、方法三:使用 python 脚本自定义转换
如果你需要在转换过程中进行自定义处理(例如过滤特定单元格、添加文件头注释等),可以编写 python 脚本实现。
基础版本:仅提取代码单元格
import json
def convert_ipynb_to_py(ipynb_file, py_file):
"""
将 jupyter notebook 文件转换为 python 脚本文件
参数:
ipynb_file: 输入的 .ipynb 文件路径
py_file: 输出的 .py 文件路径
"""
# 读取 .ipynb 文件(json 格式)
with open(ipynb_file, 'r', encoding='utf-8') as f:
notebook = json.load(f)
# 写入 .py 文件
with open(py_file, 'w', encoding='utf-8') as f:
for cell in notebook['cells']:
# 只提取 code 类型的单元格
if cell['cell_type'] == 'code':
# 将 source 列表拼接为字符串
source = ''.join(cell['source'])
f.write(source + '\n\n')
# 使用示例
if __name__ == "__main__":
convert_ipynb_to_py('your_notebook.ipynb', 'your_notebook.py')
print("转换完成!")进阶版本:保留 markdown 注释 + 过滤魔法命令
import json
import re
def convert_ipynb_to_py_advanced(ipynb_file, py_file):
"""
高级转换:保留 markdown 作为注释,过滤 jupyter 魔法命令
"""
with open(ipynb_file, 'r', encoding='utf-8') as f:
notebook = json.load(f)
with open(py_file, 'w', encoding='utf-8') as f:
# 写入文件头
f.write('# -*- coding: utf-8 -*-\n')
f.write(f'# converted from: {ipynb_file}\n')
f.write('# ============================================\n\n')
for i, cell in enumerate(notebook['cells']):
if cell['cell_type'] == 'markdown':
# 将 markdown 转换为 python 注释
source = ''.join(cell['source'])
comment_lines = ['# ' + line for line in source.split('\n')]
f.write('\n'.join(comment_lines) + '\n\n')
elif cell['cell_type'] == 'code':
source = ''.join(cell['source'])
# 过滤 jupyter 魔法命令(如 %matplotlib inline)
lines = source.split('\n')
filtered_lines = []
for line in lines:
if not line.strip().startswith('%') and not line.strip().startswith('!'):
filtered_lines.append(line)
if filtered_lines:
f.write('\n'.join(filtered_lines) + '\n\n')
# 使用示例
convert_ipynb_to_py_advanced('data_analysis.ipynb', 'data_analysis_clean.py')
优点
- ✅ 完全可控,可自定义转换逻辑
- ✅ 可集成到数据处理流水线
- ✅ 可过滤不需要的内容(如魔法命令、输出结果)
缺点
- ❌ 需要编写代码
- ❌ 可能无法完美处理所有 notebook 特性
五、方法四:使用 vs code 插件(开发者友好)
如果你使用 visual studio code 进行开发,可以通过插件实现一键转换。
操作步骤
安装 jupyter 插件
- 打开 vs code
- 进入扩展商店(ctrl+shift+x)
- 搜索并安装 jupyter(microsoft 官方插件)
打开 .ipynb 文件
- 在 vs code 中打开你的 notebook 文件
导出为 python 脚本
- 点击右上角的 …(更多操作)
- 选择 export → python script
- 选择保存位置即可
优点
- ✅ 集成在开发环境中,无需切换
- ✅ 可视化操作
- ✅ 支持调试 notebook 后直接导出
缺点
- ❌ 需要安装 vs code 和插件
- ❌ 不适合服务器环境
六、方法五:使用 pycharm / dataspell(jetbrains 用户)
如果你使用 jetbrains 系列的 ide(如 pycharm professional 或 dataspell),也支持直接导出。
操作步骤
打开 .ipynb 文件
- 在 pycharm 中打开 notebook 文件
导出操作
- 点击 notebook 工具栏上的 convert to python file 按钮
- 或右键点击文件 → export to python file
优点
- ✅ 与 ide 深度集成
- ✅ 可保持代码结构清晰
缺点
- ❌ 仅 pycharm professional / dataspell 支持
- ❌ 社区版(community)不支持
七、转换效果对比
假设我们有如下 notebook 内容:
# cell 1 (markdown)
# ## 数据分析示例
# cell 2 (code)
import pandas as pd
import matplotlib.pyplot as plt
# cell 3 (code)
%matplotlib inline
df = pd.read_csv('data.csv')
df.head()
# cell 4 (code)
plt.plot(df['x'], df['y'])
plt.show()
转换后的.py文件(方法三进阶版)
# -*- coding: utf-8 -*-
# converted from: analysis.ipynb
# ============================================
# ## 数据分析示例
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data.csv')
df.head()
plt.plot(df['x'], df['y'])
plt.show()
八、常见问题 faq
q1: 转换后的.py文件能直接运行吗?
a: 大部分情况下可以直接运行,但如果 notebook 中使用了 jupyter 魔法命令(如 %matplotlib inline、%timeit),需要在 .py 中删除或替换这些命令。
q2: 如何保留 notebook 中的输出结果?
a: jupyter nbconvert --to script 默认不保留输出。如需保留,建议使用 --to python 配合自定义模板,或使用 jupyter nbconvert --to html 先导出为 html。
q3: 转换后的中文注释乱码怎么办?
a: 确保转换时指定 encoding='utf-8',并在 .py 文件头部添加 # -*- coding: utf-8 -*-。
q4: 可以反向转换吗?(.py → .ipynb)
a: 可以!使用 jupytext 工具:
pip install jupytext jupytext --to notebook your_script.py
九、总结对比表
| 方法 | 难度 | 适用场景 | 批量转换 | 自定义 |
|---|---|---|---|---|
| jupyter 界面下载 | ⭐ 简单 | 偶尔转换 | ❌ | ❌ |
jupyter nbconvert 命令 | ⭐⭐ 中等 | 日常开发、批量处理 | ✅ | ✅ |
| python 脚本自定义 | ⭐⭐⭐ 较难 | 特殊需求、自动化 | ✅ | ✅✅✅ |
| vs code 导出 | ⭐ 简单 | vs code 用户 | ❌ | ❌ |
| pycharm / dataspell | ⭐ 简单 | jetbrains 用户 | ❌ | ❌ |
十、写在最后
本文介绍了 5 种将 jupyter notebook 转换为 python 文件的方法,从最简单的界面操作到灵活的脚本自定义,你可以根据自己的需求选择最合适的方式。
个人建议:日常使用推荐 方法二(命令行),简单高效;有特殊需求时选择 方法三(python 脚本) 进行自定义处理。
以上就是将jupyter notebook(.ipynb)文件转换为python(.py)文件的5种方法的详细内容,更多关于jupyter notebook文件转换为python文件的资料请关注代码网其它相关文章!
发表评论