将Jupyter Notebook(.ipynb)文件转换为Python(.py)文件的5种方法

 更新时间:2026年05月08日 09:08:56   作者:WL_Aurora  
在日常数据分析和机器学习开发中,Jupyter Notebook是一个非常好用的交互式开发工具,但在某些场景下,我们需要将 .ipynb文件转换为纯 Python脚本文件.py,以便于生产环境部署、代码版本管理或与其他开发者协作,本文将详细介绍5种将Jupyter Notebook转换为Python 文件的方法

摘要:在日常数据分析和机器学习开发中,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,这是最直接、最简单的方法。

操作步骤

  1. 打开你的 Jupyter Notebook 文件(.ipynb
  2. 点击顶部菜单栏的 FileDownload asPython (.py)
  3. 浏览器会自动下载转换后的 .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 脚本

  • 点击右上角的 (更多操作)
  • 选择 ExportPython 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文件的资料请关注脚本之家其它相关文章!

相关文章

  • Python3将ipa包中的文件按大小排序

    Python3将ipa包中的文件按大小排序

    这篇文章主要介绍了Python3将ipa包中的文件按大小排序,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python 图像处理画一个正弦函数代码实例

    python 图像处理画一个正弦函数代码实例

    这篇文章主要介绍了python 图像处理画一个正弦函数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 浅谈django2.0 ForeignKey参数的变化

    浅谈django2.0 ForeignKey参数的变化

    今天小编就为大家分享一篇浅谈django2.0 ForeignKey参数的变化,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python3实现ftp服务功能(客户端)

    python3实现ftp服务功能(客户端)

    这篇文章主要为大家详细介绍了python3实现ftp服务功能,客户端的相应代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 使用Pandas进行数据聚合与操作的全面指南

    使用Pandas进行数据聚合与操作的全面指南

    在数据分析的广阔领域中,数据聚合与操作无疑是核心环节,Pandas 作为 Python 生态系统中备受推崇的数据处理库,以其简洁的语法和强大的功能,成为数据分析师和科学家的首选工具,本文将带领读者全面探索 Pandas 在数据处理中的应用,涵盖从数据合并到可视化的关键技术
    2025-06-06
  • 用Python提取PDF表格的方法

    用Python提取PDF表格的方法

    这篇文章主要介绍了用Python提取PDF表格的方法,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • python对矩阵进行转置的2种处理方法

    python对矩阵进行转置的2种处理方法

    这篇文章主要介绍了python对矩阵进行转置的2种处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python合并多个Excel文件的方法实现与对比

    Python合并多个Excel文件的方法实现与对比

    在日常工作中,处理多个 Excel 文件并将它们合并为一个文件,本文将介绍两种使用 Python 合并 Excel 文件的方法,文中的示例代码讲解详细, 感兴趣的小伙伴可以了解下
    2026-01-01
  • Python基于whois模块简单识别网站域名及所有者的方法

    Python基于whois模块简单识别网站域名及所有者的方法

    这篇文章主要介绍了Python基于whois模块简单识别网站域名及所有者的方法,简单分析了Python whois模块的安装及使用相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • 在matplotlib中改变figure的布局和大小实例

    在matplotlib中改变figure的布局和大小实例

    这篇文章主要介绍了在matplotlib中改变figure的布局和大小实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论