发布于2026-07-06 阅读(0)
扫一扫,手机访问
在日常数据分析和机器学习开发中,Jupyter Notebook 确实是交互式开发的利器,这点想必大家都有体会。但有些场景下,我们得把它转成纯 Python 脚本(.py)——比如生产环境部署、代码版本管理、团队协作,或是用 Vim 快速改代码。下面整理了 5 种转换方法,从图形界面到命令行、从 IDE 插件到自定义脚本,总有一款能对上你的胃口。
在动手转换之前,不妨先想想:到底什么场景下需要这么做?
| 场景 | 说明 |
|---|---|
| 生产环境部署 | Jupyter Notebook 不适合直接在生产服务器上跑,转成 .py 后部署和调度都方便很多 |
| 代码版本管理 | .ipynb 文件里塞了大量 JSON 元数据,Git diff 看起来一团糟,.py 文件就清爽多了 |
| 团队协作 | 有人习惯用 PyCharm、VS Code 等 IDE 写纯 Python,你总不能强迫人家打开 Jupyter |
| 纯文本编辑 | 有时需要在 Vim、Nano 里快速扫一眼或修改代码,.ipynb 显然干不了这事 |
| 模块化开发 | Notebook 里的代码拆成可复用的 Python 模块,那是迟早的事 |
如果你已经打开了 Notebook,这就是最直截了当的办法。
.ipynb 文件.py 文件到本地
nbconvert 是 Jupyter 官方出品的命令行转换工具,功能扎实,批量处理、集成到 CI/CD 都不在话下。
pip install jupyter
或者只装 nbconvert 独立包:
pip install nbconvert
打开终端(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
[NbConvertApp] Converting notebook data_analysis.ipynb to script [NbConvertApp] Writing 15170 bytes to data_analysis.py
转换成功后,同级目录下就会多出一个 data_analysis.py 文件。
假如需要一次搞定整个目录下的所有 .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
| 参数 | 说明 | 示例 |
|---|---|---|
--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 |
如果你想在转换过程中干点“私活”——比如过滤掉特定单元格、给文件头加个注释、把魔法命令剔除掉——那就自己写个脚本吧。
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("转换完成!")
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')
如果你平时就用 Visual Studio Code 写代码,那装个插件一劳永逸。
安装 Jupyter 插件
打开 .ipynb 文件
导出为 Python 脚本
如果你用的是 JetBrains 家族(PyCharm Professional 或 DataSpell),也可以直接导出。
打开 .ipynb 文件
导出操作
假设我们有这样一个 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()
# -*- 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()
A: 大多数情况可以直接跑,但如果 Notebook 里用了魔法命令(如 %matplotlib inline、%timeit),需要在 .py 里手动删除或替换掉。
A: jupyter nbconvert --to script 默认不保留输出。想保留的话,可以用 --to python 加自定义模板,或者先导出成 HTML。
A: 转换时指定 encoding='utf-8',并在 .py 文件头部加上 # -*- coding: utf-8 -*- 即可。
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 脚本) 进行自定义处理。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8