一键修复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 文件并保存

具体解决方案的代码

import jsondef 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,需要 joincode_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,运行:

extract_code_from_ipynb('tushare_usage.ipynb', 'tushare_usage_recovered.py')

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

# ---- Cell 0 ----
import tushare as ts
df = ts.get_k_data('000001')
df.head()# ---- Cell 1 ----
print(df.describe())

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90792.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React入门学习——指北指南(第三节)

React 组件 在前面的内容中,我们了解了 React 的基础知识和入门案例。本节将深入探讨 React 中最核心的概念之一 —— 组件。组件是构建 React 应用的基础,理解组件的工作原理和使用方法,对于掌握 React 开发至关重要。 什么是组件? 在 React 中,组件是具有独立功能和 …

容器化环境下的服务器性能瓶颈与优化策略

更多云服务器知识,尽在hostol.com在容器化环境中,性能优化并不是一个简单的“加硬件”或“增加资源”就能解决的问题。随着技术的进步,越来越多的公司选择使用容器技术(如Docker、Kubernetes)来提高应用的灵活性、可移…

GaussDB 数据库架构师修炼(八) 等待事件(2)-ASP报告分析

1 ASP报告简介ASP-Active Sesion Profile (活跃会话档案信息),ASP每秒获取活跃会话事件,放到内存中,内存中的数据达阈值,会落盘gs_asp表中。ASP Report根据输入的时间段与slot个数,从内存和磁盘…

CentOS7 安装 Redis

在 CentOS 7 上配置 Redis 服务器需要完成安装、配置和服务管理。以下是详细步骤:安装 Redis安装依赖:yum install -y gcc tcl下载并解压 Redis:cd /usr/local/wget https://download.redis.io/releases/redis-6.2.6.tar.gztar -zxvf redis-6…

《C++ list 完全指南:从基础到高效使用》

《C list 完全指南:从基础到高效使用》 文章目录《C list 完全指南:从基础到高效使用》一、forward_list和list比较二、list的接口介绍1.list的构造2.list iterator的使用3.list的容量操作4.list的访问操作5.list的其他操作接口三、list的迭代器失效四、…

CIU32L051 DMA+Lwrb环形队列实现串口无阻塞性数据的收发 + 数据百分百不丢失的实现

1.Lwrb的介绍(博主功能的实现是基于RT-thread系统实现) Lwrb是由Tilen Majerle编写的一个线程安全的环形队列,通常与DMA配合实现数据的无阻塞性收发,同时,配合DMA的传输过半中断,传输完成中断,以…

【C++】C++ 的入门知识2

本篇文章主要讲解 C 的入门语法知识引用、inline 关键字与 nullptr 关键字。 目录 1 引用 1) 引用的概念与定义 (1) 引用的概念 (2) 引用的定义 2) 引用的特性 3) 引用的使用场…

基于Kafka实现动态监听topic功能

生命无罪,健康万岁,我是laity。 我曾七次鄙视自己的灵魂: 第一次,当它本可进取时,却故作谦卑; 第二次,当它在空虚时,用爱欲来填充; 第三次,在困难和容易之间&…

机械学习初识--什么是机械学习--机械学习有什么重要算法

一、什么是机械学习机器学习(Machine Learning)是人工智能(AI)的一个重要分支,它使计算机能够通过数据自动学习规律、改进性能,并在没有明确编程的情况下完成特定任务。其核心思想是让机器从数据中 “学习”…

普通大学生大三这一年的想法

目录 大三期间的经历与反思 公益活动:社会责任感的体现 比赛:个人成长的助推器 培训与思想提升 大学教育的本质与人才培养 构建自我的道与未来规划 大学教育的未来与个人定位 结语 大三期间的经历与反思 大三,大学生活的分水岭&#…

Python——入门

目录 变量 变量类型 动态类型 注释 输出输入 运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 条件语句 循环语句 函数 函数作用域 函数嵌套调用 函数默认参数 关键字参数 列表 切片 列表遍历 新增元素 查找元素 删除元素 列表拼接 元组…

华为荣耀部分机型从鸿蒙降回EMUI的一种方法

一、准备说明 1、这里介绍使用华为手机助手、海外代理软件结合固件将部分华为荣耀手机鸿蒙系统降级回EMUI系 统的一种方式; 2、需要降级的手机需要再出厂时内置系统为EMUI,出厂时为鸿蒙系统的无法进行降级操作; 3、降级有风险&#xff0…

maven <dependencyManagement>标签的作用

作用 dependencyManagement标签的作用:在父工程pom文件中声明依赖,但不引入;在子工程中用到声明的依赖时,可以不加依赖的版本号,这样可以统一管理工程中用到的依赖版本。 示例 先创建一个项目 dependencyManagement-de…

JSON格式化与结构对比

说明 功能格式化json字符串为最简格式,并标识值类型;比对json字符串结构。第三方依赖fastjson: 用于解析json、判断json值类型;springframework自带的字符串判断,可以不依赖该方法,改为自行实现;slf4j: 用于…

编程与数学 03-002 计算机网络 03_物理层基础

编程与数学 03-002 计算机网络 03_物理层基础一、物理层的作用与任务(一)传输媒体的类型(二)信号的传输方式二、数据编码技术(一)数字数据的数字信号编码(二)模拟数据的数字信号编码…

c语言--文件操作

思维导图:1. 为什么使用文件? 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进…

SQL中的占位符、@Param注解和方法参数

代码中出现的多个 username 和 password 代表不同层面的变量,具体含义如下(按执行顺序):### 1. Param("username") String username - 位置 :方法参数前的注解 - 作用 :- Param("username&q…

【SpringAI实战】FunctionCalling实现企业级自定义智能客服

一、前言 二、实现效果 三、代码实现 3.1 后端实现 3.2 前端实现 一、前言 Spring AI详解:【Spring AI详解】开启Java生态的智能应用开发新时代(附不同功能的Spring AI实战项目)-CSDN博客 二、实现效果 一个24小时在线的AI智能客服,可以给用户提供培…

kotlin基础【2】

变量类型var 和 val 的核心区别:关键字含义能否重新赋值类似概念(Java)varvariable(可变变量)可以普通变量(无 final)valvalue(不可变变量)不可以被 final 修饰的变量var…

【Spring AI】阿里云DashScope灵积模型

DashScope(灵积模型)是阿里云提供的大模型服务平台,集成了阿里自研的 通义千问(Qwen)系列大语言模型(LLM)以及多模态模型,为企业与开发者提供开箱即用的 AI 能力。官网地址 https://…