如何恢复已删除的iPython笔记本

30

我通过Anaconda使用iPython Notebook,不小心删除了一个重要的笔记本,但在回收站中找不到它(我认为iPy Notebook不会进入回收站)。

有谁知道我如何恢复这个笔记本?我正在使用Mac OS X。

谢谢!


如果您正在使用OSX,您可能已经启用了Time Machine,并且可以从Time Machine备份中恢复它。 - iayork
1
在Windows系统中,我在回收站里找到了我的文件。右键点击并选择还原即可。 - Abhi
12个回答

31

这是关于Thuener答案的一些额外信息,

我做了以下操作来恢复我的已删除.ipynb文件。

  1. 缓存位于~/.cache/chromium/Default/Cache/(我使用chromium)
  2. 在二进制搜索模式下使用grep,grep -a 'import math'(将搜索字符串替换为代码中特定的关键词)
  3. 在vim中编辑二进制文件(无法在gedit中打开)
    • python ipynb文件应该以'{ "cells":'开头,并且
    • 以'"nbformat": 4, "nbformat_minor": 2}'结尾
    • 删除这些开始和结束点之外的所有内容
  4. 将文件重命名为.ipynb,在jupyter-notebook中打开它,它就可以工作了。

你太棒了。非常感谢。理想情况下,“jupyter”的开发人员应该已经解决了这个问题。但是你的方法真的很棒。再次感谢。 - TheRajVJain
2
在Windows下,您可以在C:\Users\USERNAME\AppData\Local\Google\Chrome\User Data\Default\Cache中找到Chrome的缓存。 - maxstrobel
我试图在Microsoft Edge缓存中找到我删除的笔记本。C:\Users\USER_NAME\AppData\Local\Microsoft\Edge\User Data\Default\Cache文件夹只包含一个名为Cache_Data的文件夹,但没有文件。那个文件夹里有数百个以f_xxxxxx命名的文件,其中xxxxxx似乎是一些十六进制值。我编写了一个小的Python脚本,在该文件夹中的所有文件中搜索'nbformat'。没有一个文件包含字符串nbformat - MsA

25

“删除”功能现在会将文件发送到操作系统的垃圾箱,而不是永久删除它,详见这个 PR:https://github.com/jupyter/notebook/pull/1968。所以你只需要打开垃圾箱(无论在你的系统中它在哪里)并将其恢复即可。


哪个版本?这似乎不适用于jupyter 4.4.0。 - virtualxtc
1
看起来是在5.3.0版本中添加的。https://jupyter-notebook.readthedocs.io/en/stable/changelog.html#release-5-3-0 - exp1orer
3
是的,我一直想回来更新:原来我运行的是高于5.3版本的“notebook”,但由于我的文件保存在与我的主目录不同的驱动器上,所以“Send2Trash”会中断并悄悄地删除文件而不是将其放入垃圾箱。这很糟糕,因为确认删除消息已被删除,因为该过程不应该是破坏性的(但现在却是悄悄的)。 - virtualxtc
哦,那很不幸!我建议在Github上开一个问题。 - exp1orer
太好了!在垃圾桶里找到它了。 - Rene B.

19

我认为最简单的方法(在开发者解决这个问题之前)是将您的Ipython历史记录全部写入一个空文件中。

您需要按创建最后一个脚本的日期进行检查。显然,这将是您的Ipython历史记录的最后部分。

将您的Ipython历史记录写入文件的方法:

%history -g -f anyfilename

2
这个可行!省了一整天的工作,现在已经快凌晨3点了,谢谢! - DavidH

14

在Linux系统中:

我犯了同样的错误,最终在垃圾桶中找到了被删除的文件,路径为/home/$USER/.local/share/Trash/files


1
这真是太棒了,这个方法确实有效! - Anqi
你节省了我很多时间。上帝保佑你! - Mehrdad Zandigohar
在Ubuntu中检查“垃圾箱”。 - DanielBell99

10

如果您通过操作系统删除了文件(使用命令:rm file.ipynb),那么您可以从~/.ipython_checkpoints/目录中找回它。但是,如果您是通过浏览器菜单选项删除的,则该文件已经被彻底删除(这是设计上的限制)。

在此处查看讨论:https://github.com/jupyter/notebook/issues/405


1
检查点被设计为消失了,但直接删除它而不是将其发送到垃圾箱是因为还没有解决这个问题。 - Thomas K

3

对于像我这样不幸删除了JuliaBox(Julia的jupyter)上一些文件的人来说,有一个解决方案。我成功地恢复了所有被删除的文件。

浏览器会存储关于您访问的页面的缓存信息。您需要找到您的浏览器缓存文件夹(在Ubuntu中使用Chrome是~/.cache/google-chrome/Default/Cache),并在二进制文件中搜索笔记本的某些文本。然后,从相应于您的ipynb的文件中剪切文本部分。

https://groups.google.com/forum/#!searchin/julia-box/delete%7Csort:relevance/julia-box/Rt9LG9RldrU/3s_vVSrivJEJ


3
如果您使用PyCharm,您可以执行以下操作:
  1. 打开本地历史记录视图。

  2. 选择您想要回滚到的版本。

  3. 在所选内容的上下文菜单中,选择还原。

对我有效!
来源:这里

1
只要您的内核处于活动状态,每个执行单元格的代码都存储在输入历史记录列表中。当您意外删除一个单元格并希望检索其内容时,这将非常方便。
_ih[-10:] *# code of the 10 most recently run cells (Even if those cells are deleted now)*

1
如果你正在使用Windows系统,它会将其发送到回收站,这是个好消息。显然,制作检查点是一个好主意。

1
如果您像我一样在Linux上运行Jupyterlab,您需要进入命令提示符并转到垃圾文件夹。
Linux上的垃圾目录通常是:
/home/$USER/.local/share/Trash

或者

如果您以root身份删除了某些内容(例如使用gksu调用的Nautilus删除文件),它将位于以下位置:

/root/.local/share/Trash

我最终改变了目录到/home/$USER/.local/share/Trash/files,我的已删除笔记本在那里!根据您访问后端的方式,您也可以尝试/home/jupyter/.local/share/Trash/。
附言 如果由于权限问题无法从Trash更改目录到files,请不要忘记成为root:
sudo -i

在执行sudo -i命令后,使用以下命令向上移动:

cd ..

然后

cd home/jupyter/.local/share/Trash
cd files

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接