【问题标题】:Recovering command history in Jupyter Notebook?在 Jupyter Notebook 中恢复命令历史记录?
【发布时间】:2018-06-30 14:40:51
【问题描述】:

过去一周我一直在编辑 Jupyter Notebook,今天尝试保存它。在尝试保存时遇到错误,所以我刷新了页面并成功保存。

然而,令我沮丧的是,我几乎所有的命令历史都丢失了!我仍然可以访问变量(内核从未死亡),但我无法访问任何代码。

有没有办法恢复代码?内核仍在运行,但我的笔记本中没有看到任何检查点。

【问题讨论】:

    标签: python python-3.x ipython jupyter-notebook jupyter


    【解决方案1】:

    您可以获取 Jupyter Notebook 用作其内核的 IPython 历史记录。在其中一个单元格中运行:

    %history
    

    这将转储您在当前 IPython 会话中运行的每个命令的历史记录(好的、坏的和丑陋的)。这可能比你想要的多,但总比失去所有工作要好。

    【讨论】:

      【解决方案2】:

      类似的事情发生在我身上,我无法保存我所做的事情,刷新了页面,并丢失了所有命令。

      您可以通过运行获取整个笔记本历史记录并将输出重定向到任何给定文件

      %history -g -f filename
      

      在我的例子中,我将它重定向到一个 (.py) 文件。您可以在“%history”下的https://ipython.readthedocs.io/en/stable/interactive/magics.html 找到更多文档。

      【讨论】:

      • 我只是想补充一点,当 TonyV 说“整个”笔记本历史时,他的意思是指整个笔记本历史。我刚刚这样做了,%history -g -f filename 生成了一个包含数百万行的文件,我什至可以在其中找到我写过的最初几行 python。这太棒了,这个答案需要更多的支持。
      • 这是一个很好的解决方案,如果您不小心删除了一个包含重要 def 的单元格,然后又保存了:因此在内核重新启动后您无法找到该 def。但是您仍然可以 grep 保存的历史文件并再次将其拉出。 jupyter 中的“撤消”不会取消删除输入单元格...
      【解决方案3】:

      如果您的内核尚未重新启动,您可以从全局变量(如 _i{1,2,3,...})获取代码。

      查找代码的最简单方法是运行类似

      print([k for k, v in globals.items() if 'some unique code snippet' in str(v)])
      

      假设你有 ['_i2', '_i5', '_i9'] 之类的东西,那么你可以

      print(_i9)
      

      并将其复制粘贴到新单元格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 2013-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-02
        • 2021-04-12
        相关资源
        最近更新 更多