一鍵修復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
英文地址,請注明出處:http://en.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://…