【问题标题】:How do I reset the Jupyter/IPython input prompt numbering?如何重置 Jupyter/IPython 输入提示编号?
【发布时间】:2013-09-19 23:50:27
【问题描述】:

我刚刚使用 IPython 笔记本编写了我的第一个广泛的 Python 教程。一切都很顺利,除了我做了很多测试和移动块。如何重置In [ ]: 编号?我试过退出并重新加载,但这似乎不起作用。

【问题讨论】:

    标签: ipython jupyter-notebook ipython-notebook jupyter


    【解决方案1】:

    我认为,实现您想要的唯一方法是: - 'Kernel > Restart'(重新启动内核)然后'Cell > Run All'(运行脚本)。

    【讨论】:

    • 正是我想要的。谢谢!
    • 现在在内核“重新启动并运行所有”下有一个选项,现在只需单击一下即可执行相同的操作,正如 Vlad Bezden 在下面提到的那样。
    • 清除左侧所有这些数字的另一个有效选项位于顶部栏:>“内核”>“重新启动并清除输出”。然后单击“重新启动并清除所有输出”进行确认,您将拥有相同的笔记本,但没有任何输入数字。
    【解决方案2】:

    您可以重置内核(快捷方式:C-m .)并重新运行整个笔记本。

    退出和重新加载不起作用,因为没有重新评估代码。

    【讨论】:

    • 我刚刚想通了。在菜单单元格 > 所有输出 > 清除
    • Cell > All Output > Clear 只是清除输出,不会重置编号...Kernel > Restart 会这样做。
    【解决方案3】:

    每个.ipynb 文件都可以在编辑器中打开。那里写的所有内容都是纯文本(JSON)。对于每个具有"cell_type": "code" 的单元格,将有另一个键值对作为"execution_count": <number>。您可能已经猜到了,这就是提示编号。因此,如果笔记本包含需要时间执行的代码(在我的例子中),这种方法将是高效的。

    现在,您可以手动更改每个execution_count,也可以编写一个简单的脚本来正确编号。要检查结果,只需在浏览器中刷新笔记本而不停止内核。而且,一切都将根据您的需要,甚至所有变量/加载的数据都将保留在环境中。

    【讨论】:

    • +1,对于我们这些来这里询问我们如何在不重新运行整个笔记本的情况下重置执行次数的人。
    • @JulianDrago 是的,我的笔记本有时需要数小时甚至数天才能运行……重新启动内核通常不是仅仅重置执行次数的选项。
    • 对于那些想通过正则表达式搜索替换的人:(?<=("execution_count": ))\d+
    【解决方案4】:
    'Kernel' -> 'Restart & Run All'
    

    只要确保您保存了笔记本即可。您还可以绑定/分配键盘键以运行此命令。

    'Help' -> 'Edit Keyboard Shortcuts'
    

    【讨论】:

    • 谢谢!我将“Ctrl-Shift-R”添加到“重新启动内核并运行所有单元”。
    【解决方案5】:

    我有点晚了,但我遇到了同样的问题,由于我的笔记本有执行时间长达 5 分钟的单元格,我不得不等待很长时间,直到 重新启动并全部运行 完成了。

    所以我编写了一个 Python 脚本来为我完成这项任务:

    import json
    
    file = '/your/notebook/path/Notebook.ipynb'
    
    # Since every notebook is actually a JSON (JavaScript
    # Object Notation), then its contents can be represented
    # in a dictionary (or a list of dictionaries)
    with open(file, encoding='utf-8') as f:
        nb = json.load(f)
    
    count = 1
    for cell in nb['cells']:
        # Markdown cells doesn't have execution count,
        # so apply this only to cells that have one
        if 'execution_count' in cell:
            cell['execution_count'] = count
            count += 1        
    
        # Not all code cells have output, such as functions
        # that return None or simple declarations, so apply
        # this only to cells that have some output
        try:
            for output in cell['outputs']:
                if 'execution_count' in output:
                    output['execution_count'] = cell['execution_count']
    
        except KeyError:
            continue
    
    with open(file, 'w+') as f:
        json.dump(nb, f, indent=2, ensure_ascii=False)
    

    但请注意执行顺序和单元格中的变量,因为如果再次运行笔记本,在笔记本上应用上述脚本可能会生成不同的输出。例如,假设您的笔记本有以下单元格,执行顺序在方括号中:

    In [2]: a = 1
    
    In [1]: a = 2
    
    In [3]: a
    
    Out[3]: 1
    

    如果您将上述脚本应用到您的笔记本中,它将显示以下内容:

    In [1]: a = 1
    
    In [2]: a = 2
    
    In [3]: a
    
    Out[3]: 1
    

    但如果你再次运行 notebook,它会显示以下内容:

    In [1]: a = 1
    
    In [2]: a = 2
    
    In [3]: a
    
    Out[3]: 2
    

    这对于通过 GitHub 下载笔记本的人来说可能会有点混乱,因为他们可以在存储库中看到输出,但是当他们在自己的机器上运行时,输出会有所不同。

    【讨论】:

      【解决方案6】:

      如果您想要删除数字本身,以便每个单元格显示In [ ](而不是像In [247] 之类的东西,这是内核以前的化身留下的),请使用“Cell”>“All Output " > “清除”(在 Jupyter Notebook 5.4.0 中)或“编辑”>“清除所有输出”(在 Jupyter Lab 0.32.1 中)。

      这将删除所有数字,即使您正在运行笔记本也是如此。它不会将编号重置回 1;例如如果您执行的最后一个单元格是 18,则下一个单元格将是 19。

      如果您使用它是因为您想清楚在内核运行期间执行了哪些单元以及尚未执行哪些单元,请使用“单元”>“所有输出”>“清除”(或“编辑”>“清除所有输出”)在您启动(或重新启动)内核后立即。这在重新启动内核或打开已保存或复制的笔记本时很有用。

      这还将删除笔记本中的所有输出。

      感谢 user2651084 在之前的评论中对此。

      【讨论】:

        【解决方案7】:

        Cell > All Output > Clear 清除所有 In []: 数字,但不要将它们重置为 1,以便您运行的下一个单元格。

        Kernel > Restart & Clear Output重启内核,清空输出,清空In []:数字并重置为1,清空输出。

        【讨论】:

          【解决方案8】:

          Restart & Run All 不是一个好的解决方案,因为我不想全部运行(这就是笔记本逐个单元运行的目的)。

          无论如何,我发现这个解决方案更合理:

          Main Menu > Cell  > All Output > Clear
          

          【讨论】:

            【解决方案9】:

            对于来自 Google 的用户:

            %reset
            

            当您想在笔记本中的某个点之后重置所有变量时,这很有用。它会询问您是否确定要重置。如果您想在不询问的情况下强制重置,请使用:

            %reset -f
            

            【讨论】:

            • 这不能回答问题。
            猜你喜欢
            • 2012-06-14
            • 2021-12-10
            • 1970-01-01
            • 1970-01-01
            • 2016-05-30
            • 1970-01-01
            • 1970-01-01
            • 2020-12-23
            • 1970-01-01
            相关资源
            最近更新 更多