將Jupyter Notebook(.ipynb)文件轉(zhuǎn)換為Python(.py)文件的5種方法
摘要:在日常數(shù)據(jù)分析和機器學習開發(fā)中,Jupyter Notebook 是一個非常好用的交互式開發(fā)工具。但在某些場景下,我們需要將 .ipynb 文件轉(zhuǎn)換為純 Python 腳本文件(.py),以便于生產(chǎn)環(huán)境部署、代碼版本管理或與其他開發(fā)者協(xié)作。本文將詳細介紹 5 種將 Jupyter Notebook 轉(zhuǎn)換為 Python 文件的方法,涵蓋圖形界面、命令行、Python 腳本、IDE 工具等多種方式,總有一種適合你!
一、為什么要進行轉(zhuǎn)換?
在正式開始之前,我們先來了解一下為什么需要將 .ipynb 轉(zhuǎn)換為 .py:
| 場景 | 說明 |
|---|---|
| 生產(chǎn)環(huán)境部署 | Jupyter Notebook 不適合直接在生產(chǎn)服務器上運行,轉(zhuǎn)換為 .py 后可以方便地部署和調(diào)度 |
| 代碼版本管理 | .ipynb 文件包含大量 JSON 元數(shù)據(jù),Git diff 難以閱讀,.py 文件更利于代碼審查 |
| 團隊協(xié)作 | 部分團隊成員更習慣使用 PyCharm、VS Code 等 IDE 開發(fā)純 Python 文件 |
| 純文本編輯 | 有時需要在 Vim、Nano 等終端編輯器中快速查看或修改代碼 |
| 模塊化開發(fā) | 將 Notebook 中的代碼整理為可復用的 Python 模塊 |
二、方法一:使用 Jupyter Notebook 自帶功能(最簡單)
如果你已經(jīng)安裝并打開了 Jupyter Notebook,這是最直接、最簡單的方法。
操作步驟
- 打開你的 Jupyter Notebook 文件(
.ipynb) - 點擊頂部菜單欄的 File → Download as → Python (.py)
- 瀏覽器會自動下載轉(zhuǎn)換后的
.py文件到本地
操作示意圖

優(yōu)點
- ? 無需安裝額外工具
- ? 一鍵操作,零門檻
- ? 保留代碼結(jié)構(gòu)
缺點
- ? 需要手動打開 Jupyter Notebook
- ? 不適合批量轉(zhuǎn)換
- ? 無法自定義輸出格式
三、方法二:使用命令行工具jupyter nbconvert(推薦)
nbconvert 是 Jupyter 官方提供的命令行轉(zhuǎn)換工具,功能強大,支持批量轉(zhuǎn)換和多種格式。
1. 安裝 Jupyter(如未安裝)
pip install jupyter
或安裝 nbconvert 獨立包:
pip install nbconvert
2. 基本轉(zhuǎn)換命令
打開終端(Windows 使用 CMD / PowerShell,macOS/Linux 使用 Terminal),進入 .ipynb 文件所在目錄,執(zhí)行:
jupyter nbconvert --to script your_notebook.ipynb
示例:
# 進入文件目錄 cd D:\Projects\MyProject # 執(zhí)行轉(zhuǎn)換 jupyter nbconvert --to script data_analysis.ipynb
3. 終端輸出示例
[NbConvertApp] Converting notebook data_analysis.ipynb to script [NbConvertApp] Writing 15170 bytes to data_analysis.py
轉(zhuǎn)換成功后,你會在同級目錄下看到生成的 data_analysis.py 文件。
4. 批量轉(zhuǎn)換多個文件
如果需要一次性轉(zhuǎn)換目錄下的所有 .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. 常用參數(shù)說明
| 參數(shù) | 說明 | 示例 |
|---|---|---|
--to script | 轉(zhuǎn)換為 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 |
優(yōu)點
- ? 無需打開瀏覽器
- ? 支持批量轉(zhuǎn)換
- ? 可集成到自動化腳本 / CI/CD 流程
- ? 支持自定義模板
缺點
- ? 需要記住命令
- ? 對新手有一定門檻
四、方法三:使用 Python 腳本自定義轉(zhuǎn)換
如果你需要在轉(zhuǎn)換過程中進行自定義處理(例如過濾特定單元格、添加文件頭注釋等),可以編寫 Python 腳本實現(xiàn)。
基礎(chǔ)版本:僅提取代碼單元格
import json
def convert_ipynb_to_py(ipynb_file, py_file):
"""
將 Jupyter Notebook 文件轉(zhuǎn)換為 Python 腳本文件
參數(shù):
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("轉(zhuǎn)換完成!")進階版本:保留 Markdown 注釋 + 過濾魔法命令
import json
import re
def convert_ipynb_to_py_advanced(ipynb_file, py_file):
"""
高級轉(zhuǎn)換:保留 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 轉(zhuǎn)換為 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')
優(yōu)點
- ? 完全可控,可自定義轉(zhuǎn)換邏輯
- ? 可集成到數(shù)據(jù)處理流水線
- ? 可過濾不需要的內(nèi)容(如魔法命令、輸出結(jié)果)
缺點
- ? 需要編寫代碼
- ? 可能無法完美處理所有 Notebook 特性
五、方法四:使用 VS Code 插件(開發(fā)者友好)
如果你使用 Visual Studio Code 進行開發(fā),可以通過插件實現(xiàn)一鍵轉(zhuǎn)換。
操作步驟
安裝 Jupyter 插件
- 打開 VS Code
- 進入擴展商店(Ctrl+Shift+X)
- 搜索并安裝 Jupyter(Microsoft 官方插件)
打開 .ipynb 文件
- 在 VS Code 中打開你的 Notebook 文件
導出為 Python 腳本
- 點擊右上角的 …(更多操作)
- 選擇 Export → Python Script
- 選擇保存位置即可
優(yōu)點
- ? 集成在開發(fā)環(huán)境中,無需切換
- ? 可視化操作
- ? 支持調(diào)試 Notebook 后直接導出
缺點
- ? 需要安裝 VS Code 和插件
- ? 不適合服務器環(huán)境
六、方法五:使用 PyCharm / DataSpell(JetBrains 用戶)
如果你使用 JetBrains 系列的 IDE(如 PyCharm Professional 或 DataSpell),也支持直接導出。
操作步驟
打開 .ipynb 文件
- 在 PyCharm 中打開 Notebook 文件
導出操作
- 點擊 Notebook 工具欄上的 Convert to Python File 按鈕
- 或右鍵點擊文件 → Export to Python File
優(yōu)點
- ? 與 IDE 深度集成
- ? 可保持代碼結(jié)構(gòu)清晰
缺點
- ? 僅 PyCharm Professional / DataSpell 支持
- ? 社區(qū)版(Community)不支持
七、轉(zhuǎn)換效果對比
假設(shè)我們有如下 Notebook 內(nèi)容:
# Cell 1 (Markdown)
# ## 數(shù)據(jù)分析示例
# 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()
轉(zhuǎn)換后的.py文件(方法三進階版)
# -*- coding: utf-8 -*-
# Converted from: analysis.ipynb
# ============================================
# ## 數(shù)據(jù)分析示例
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: 轉(zhuǎn)換后的.py文件能直接運行嗎?
A: 大部分情況下可以直接運行,但如果 Notebook 中使用了 Jupyter 魔法命令(如 %matplotlib inline、%timeit),需要在 .py 中刪除或替換這些命令。
Q2: 如何保留 Notebook 中的輸出結(jié)果?
A: jupyter nbconvert --to script 默認不保留輸出。如需保留,建議使用 --to python 配合自定義模板,或使用 jupyter nbconvert --to html 先導出為 HTML。
Q3: 轉(zhuǎn)換后的中文注釋亂碼怎么辦?
A: 確保轉(zhuǎn)換時指定 encoding='utf-8',并在 .py 文件頭部添加 # -*- coding: utf-8 -*-。
Q4: 可以反向轉(zhuǎn)換嗎?(.py → .ipynb)
A: 可以!使用 jupytext 工具:
pip install jupytext jupytext --to notebook your_script.py
九、總結(jié)對比表
| 方法 | 難度 | 適用場景 | 批量轉(zhuǎn)換 | 自定義 |
|---|---|---|---|---|
| Jupyter 界面下載 | ? 簡單 | 偶爾轉(zhuǎn)換 | ? | ? |
jupyter nbconvert 命令 | ?? 中等 | 日常開發(fā)、批量處理 | ? | ? |
| Python 腳本自定義 | ??? 較難 | 特殊需求、自動化 | ? | ??? |
| VS Code 導出 | ? 簡單 | VS Code 用戶 | ? | ? |
| PyCharm / DataSpell | ? 簡單 | JetBrains 用戶 | ? | ? |
十、寫在最后
本文介紹了 5 種將 Jupyter Notebook 轉(zhuǎn)換為 Python 文件的方法,從最簡單的界面操作到靈活的腳本自定義,你可以根據(jù)自己的需求選擇最合適的方式。
個人建議:日常使用推薦 方法二(命令行),簡單高效;有特殊需求時選擇 方法三(Python 腳本) 進行自定義處理。
以上就是將Jupyter Notebook(.ipynb)文件轉(zhuǎn)換為Python(.py)文件的5種方法的詳細內(nèi)容,更多關(guān)于Jupyter Notebook文件轉(zhuǎn)換為Python文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python二進制文件讀取并轉(zhuǎn)換為浮點數(shù)詳解
這篇文章主要介紹了Python二進制文件讀取并轉(zhuǎn)換為浮點數(shù)詳解,用python讀取二進制文件,這里主要用到struct包,而這個包里面的方法主要是unpack、pack、calcsize。,需要的朋友可以參考下2019-06-06
Ubuntu下使用Python實現(xiàn)游戲制作中的切分圖片功能
這篇文章主要介紹了Ubuntu下使用Python實現(xiàn)游戲制作中的切分圖片功能,涉及Python針對圖片的讀取、載入、切分運算等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03

