Python 开发中:`.ipynb`(Jupyter Notebook 文件)和 `.py`(Python 脚本文件)

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)

这个程序的主要功能和特点:

  1. 工作原理:

    • Jupyter Notebook文件本质上是JSON格式,程序会解析这个JSON
    • 筛选出类型为"code"的单元格
    • 提取这些单元格中的代码内容并进行合并
    • 将合并后的代码写入到指定的Python文件
  2. 使用方法:

    • 基本用法:python ipynb2py.py your_notebook.ipynb
    • 指定输出文件:python ipynb2py.py your_notebook.ipynb -o output.py
  3. 额外功能:

    • 在不同代码单元格之间添加了分隔线注释,方便区分原始的代码块
    • 包含错误处理,如文件不存在、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 的场景
  1. 数据分析与可视化

    例如用 Pandas 处理数据、Matplotlib/Seaborn 绘图时,.ipynb 可分步执行代码,实时查看中间结果(如表格、图表),并通过 Markdown 记录分析思路,形成「可执行的报告」。

  2. 机器学习/深度学习实验

    训练模型时,可分步运行数据预处理、模型定义、训练、评估等代码,方便调试中间过程(如查看数据分布、调整参数后重新运行某一步)。

  3. 教学与演示

    适合编写教程或课件:用 Markdown 单元格写说明文字,代码单元格实时运行展示效果,还可插入公式(LaTeX)、图片,让内容更易懂。

  4. 快速原型验证

    验证一个想法时(如测试一段算法逻辑),.ipynb 支持快速修改并运行单个单元格,无需重新执行整个脚本,效率更高。

优先选 .py 的场景
  1. 开发可复用的程序/工具

    例如编写一个命令行工具、Web 应用(如 Flask/Django 项目)或自动化脚本(如定时任务),.py 的线性结构更适合组织逻辑,且可直接通过 Python 解释器执行。

  2. 编写模块/库

    当代码需要被其他程序导入(如 import mymodule)时,必须用 .py 格式,因为 .ipynb 无法被 Python 解释器识别为模块。

  3. 大型项目与团队协作

    大型项目代码量多、逻辑复杂,.py 的结构化组织(如函数、类、包)更便于维护,且版本控制工具(如 Git)能清晰追踪代码修改,而 .ipynb 的元数据会干扰差异对比。

  4. 需要自动化执行的场景

    例如通过脚本定时运行任务(如爬虫、数据备份),.py 可直接通过命令行调用(python script.py),或集成到调度工具(如 Crontab)中,而 .ipynb 需要额外工具(如 nbconvert)转换后才能执行。

3、总结

  • .ipynb 是「交互式笔记本」,擅长分步执行、可视化展示、记录思路,适合数据分析、实验、教学等场景。
  • .py 是「纯代码脚本」,擅长结构化编程、模块复用、自动化执行,适合开发程序、库、大型项目等场景。

实际开发中,两者也可配合使用:例如用 .ipynb 做实验和分析,再将成熟的逻辑整理到 .py 文件中作为正式代码。

三、各自的常用编程工具

.ipynb(Jupyter Notebook)和 .py(Python 脚本)因使用场景不同,常用的工具也各有侧重,以下是两者最常用的工具及特点:

1、.ipynb(Jupyter Notebook)常用工具

.ipynb 文件的核心是「交互式运行」和「富文本展示」,因此工具多围绕这两个特点设计,且大多支持 Jupyter 内核(可运行代码单元格并展示结果)。

  1. Jupyter Notebook(官方基础工具)

    • 最经典的 .ipynb 编辑工具,基于浏览器运行,界面简洁,支持代码单元格、Markdown 单元格分离,可实时运行代码并展示结果(如表格、图表)。
    • 适合:本地快速启动,轻量数据分析、教学演示。
    • 启动方式:命令行输入 jupyter notebook
  2. JupyterLab(官方增强版)

    • Jupyter Notebook 的升级版,提供更强大的集成环境:支持多标签页、文件浏览器、终端、代码补全、实时协作等,界面更接近传统 IDE。
    • 适合:复杂数据分析、多文件协同处理(如同时编辑 .ipynb.py)。
    • 启动方式:命令行输入 jupyter lab
  3. Google Colab(在线免费工具)

    • 谷歌提供的在线 Jupyter 环境,无需本地安装,直接在浏览器中编辑 .ipynb,支持免费 GPU/TPU 加速(适合机器学习训练)。
    • 优势:自带常用库(如 Pandas、TensorFlow),可直接关联 Google Drive 保存文件,方便分享和协作。
    • 适合:快速实验、机器学习训练、跨设备访问。
  4. VS Code(集成 Jupyter 功能)

    • 主流代码编辑器,通过内置的「Jupyter 扩展」支持 .ipynb 编辑:可运行代码单元格、展示图表、支持 Markdown 渲染,同时保留 VS Code 的代码补全、调试等功能。
    • 适合:习惯 VS Code 界面,需要同时处理 .ipynb.py 文件的场景。
  5. PyCharm(专业版)

    • 强大的 Python IDE,专业版原生支持 .ipynb 编辑:可运行单元格、查看结果,且集成了 PyCharm 的调试、重构等高级功能。
    • 适合:在大型项目中同时管理 .ipynb(实验代码)和 .py(正式代码)的开发者。
  6. Kaggle Notebook(数据科学竞赛工具)

    • 专注于数据科学的在线平台,基于 Jupyter 环境,内置大量数据集和竞赛资源,支持 GPU 加速,方便分享代码和结果。
    • 适合:数据科学竞赛、公开数据集分析。

2、.py(Python 脚本)常用工具

.py 文件的核心是「结构化编程」和「批量执行」,工具更侧重代码编辑效率、项目管理、调试和自动化运行。

  1. VS Code(主流选择)

    • 轻量且功能强大的编辑器,通过「Python 扩展」提供:代码补全、语法高亮、调试(断点、变量监视)、单元测试、虚拟环境管理等功能,支持直接在终端运行 .py 脚本。
    • 优势:插件丰富(如 Git 集成、代码格式化),跨平台(Windows/macOS/Linux),适合个人开发者和中小型项目。
  2. PyCharm(专业版/社区版)

    • 专为 Python 设计的 IDE,功能全面:
      • 社区版(免费):支持基础编辑、调试、Git 集成,满足日常脚本开发;
      • 专业版(付费):增加 Web 开发(Django/Flask)、数据库集成、远程开发等高级功能,适合大型项目。
    • 适合:团队协作、复杂项目(如 Web 应用、Python 库开发)。
  3. Sublime Text(轻量编辑器)

    • 启动速度快,通过「Anaconda」等插件支持 Python 代码补全、语法检查,适合编写简单 .py 脚本或临时调试代码。
    • 适合:追求轻量化、快速编辑的场景。
  4. 终端/命令行工具

    • 无需图形界面,直接通过 python script.pypython3 script.py 运行 .py 脚本,是自动化执行(如定时任务、服务器脚本)的基础工具。
    • 常用终端:Windows 的 PowerShell、macOS/Linux 的 Terminal,配合 nohup(后台运行)、crontab(定时任务)等命令使用。
  5. Spyder(科学计算友好)

    • 专为数据科学设计的 IDE,界面类似 MATLAB,集成了 IPython 控制台、变量浏览器,支持 .py 脚本的编辑和运行,适合需要结合数值计算的场景。
  6. Vim/Neovim(命令行编辑器)

    • 纯键盘操作的编辑器,通过 python-mode 等插件支持 Python 语法高亮、代码补全,适合习惯命令行操作或远程服务器开发的用户。

最最最常用的:

  • .ipynb 工具围绕「交互式运行+富文本」,核心是 Jupyter 系列(Notebook/Lab)VS Code(需集成 Jupyter);
  • .py 工具围绕「结构化编程+批量执行」,核心是 VS Code、PyCharm。

实际使用中,VS Code 和 PyCharm 是「通吃型」工具,既能处理 .ipynb 也能高效编辑 .py,适合大多数场景。

相关推荐
朱嘉鼎18 小时前
C语言之可变参函数
c语言·开发语言
yanxing.D18 小时前
OpenCV轻松入门_面向python(第六章 阈值处理)
人工智能·python·opencv·计算机视觉
JJJJ_iii19 小时前
【机器学习01】监督学习、无监督学习、线性回归、代价函数
人工智能·笔记·python·学习·机器学习·jupyter·线性回归
北冥湖畔的燕雀21 小时前
C++泛型编程(函数模板以及类模板)
开发语言·c++
Python图像识别1 天前
71_基于深度学习的布料瑕疵检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo
QX_hao1 天前
【Go】--map和struct数据类型
开发语言·后端·golang
你好,我叫C小白1 天前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
千码君20161 天前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
淮北4941 天前
windows安装minicoda
windows·python·conda
Evand J1 天前
【MATLAB例程】基于USBL和DVL的线性回归误差补偿,对USBL和DVL导航数据进行相互补偿,提高定位精度,附代码下载链接
开发语言·matlab·线性回归·水下定位·usbl·dvl