一键修复ipynb,Jupyter Notebook损坏文件

背景

最近在写一个数据分析项目时,不幸遇到了 断电导致电脑重启 的突发情况。当我再次打开 Jupyter Notebook 文件(.ipynb)时,发现文件已经损坏,Jupyter 无法正常读取它,甚至有时直接报错:

Unreadable Notebook: NotJSONError: Notebook does not appear to be JSON

当时脑袋一热,以为几小时的工作都白费了。但 .ipynb 文件本质是 一个 JSON 格式的文本文件 ,所以理论上,我们仍然有机会手动提取出其中的代码部分。

于是我写了一个小脚本,成功地把所有代码提取出来保存为 .py 文件,也成功"自救"!

解决思路

Jupyter Notebook 的每个代码单元(Code Cell)结构如下:

复制代码
{
 "cell_type": "code",
 "source": [
  "import numpy as np\n",
  "print(np.arange(10))\n"
 ],
 ...
}

我们可以写个 Python 脚本:

  1. 加载 .ipynb 文件的 JSON 内容

  2. 遍历所有 cell

  3. 提取 "cell_type": "code" 类型的 "source" 内容

  4. 拼接成纯 Python 文件并保存

具体解决方案的代码

python 复制代码
import json

def extract_code_from_ipynb(ipynb_path, output_py_path):
    with open(ipynb_path, 'r', encoding='utf-8') as f:
        data = json.load(f)

    code_lines = []

    for idx, cell in enumerate(data.get('cells', [])):
        if cell.get('cell_type') == 'code':
            code_lines.append(f"# ---- Cell {idx} ----")
            code = ''.join(cell.get('source', []))  # 是一个 list,需要 join
            code_lines.append(code)
            code_lines.append('\n')  # 添加空行分隔

    with open(output_py_path, 'w', encoding='utf-8') as f:
        f.write('\n'.join(code_lines))

    print(f"提取完成,代码已保存到:{output_py_path}")

假设你的 notebook 文件名为 tushare_usage.ipynb,运行:

python 复制代码
extract_code_from_ipynb('tushare_usage.ipynb', 'tushare_usage_recovered.py')

脚本会生成一个新的 Python 文件,包含你所有的代码:

python 复制代码
# ---- Cell 0 ----
import tushare as ts
df = ts.get_k_data('000001')
df.head()

# ---- Cell 1 ----
print(df.describe())

如果你也不幸遇到了 notebook 文件损坏的情况,不妨试试这个脚本,可能就能帮你挽回几个小时的心血。希望这个小工具能帮到你!

相关推荐
橙橙笔记1 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事2 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
天天被压力4 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力4 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A4 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
小lo想吃棒棒糖4 小时前
把机器人训练从 GPU 搬到昇腾 NPU:启元 Q1 起身动作 PPO 训练全记录
python·机器人·昇腾·启元机器人
Thanks_ks5 小时前
【第 006 讲】搭建 PyCharm 开发环境:PyCharm 的下载与安装 | 初始设置与常用配置
ide·python·pycharm·开发工具·jetbrains·开发环境·集成开发环境
青少儿编程课堂6 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
tellmewhoisi6 小时前
nlp:知识库检索和dify知识库创建
python·自然语言处理
2601_968793146 小时前
Python Requests 轻量自动化:无需浏览器,实现真人级账号浏览模拟
开发语言·python·自动化