我刚刚使用 IPython 笔记本编写了我的第一个广泛的 Python 教程。一切都很顺利,除了我做了很多测试和移动块。如何重置In [ ]:
编号?我试过退出并重新加载,但这似乎不起作用。
9 回答
我认为,达到你想要的唯一方法是: - 'Kernel > Restart'(重新启动内核)然后'Cell > Run All'(运行脚本)。
您可以重置内核(快捷方式:)C-m .
并重新运行整个笔记本。
退出和重新加载不起作用,因为没有重新评估代码。
每个.ipynb
文件都可以在编辑器中打开。那里写的所有内容都是纯文本(JSON)。对于每个具有 的单元格,"cell_type": "code"
都会有另一个键值对作为"execution_count": <number>
. 您可能已经猜到了,这就是提示编号。因此,如果笔记本包含需要时间执行的代码(在我的情况下),这种方法将是时间高效的。
现在,您可以手动更改每个execution_count
或编写一个简单的脚本来获得正确的编号。要检查结果,只需在浏览器中刷新笔记本而不停止内核。而且,一切都将根据您的需要,甚至所有变量/加载的数据都将保留在环境中。
'Kernel' -> 'Restart & Run All'
只要确保你保存了你的笔记本。您还可以绑定/分配键盘键以运行此命令。
'Help' -> 'Edit Keyboard Shortcuts'
我有点太晚了,但我遇到了同样的问题,而且由于我的笔记本有执行时间长达 5 分钟的单元,我不得不等待很长时间,直到Restart & Run All完成。
所以我制作了一个 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
但是,如果您再次运行笔记本,它将显示以下内容:
In [1]: a = 1
In [2]: a = 2
In [3]: a
Out[3]: 2
例如,对于通过 GitHub 下载笔记本的人来说,这可能会有点令人困惑,因为他们可以在存储库中看到输出,但是当他们在自己的机器上运行时,输出会有所不同。
如果您想要自己删除数字,以便显示每个单元格In [ ]
(而不是像In [247]
以前的内核化身遗留下来的那样),请使用“Cell”>“All Output”>“Clear”(在 Jupyter Notebook 5.4.0)或“编辑”>“清除所有输出”(在 Jupyter Lab 0.32.1 中)。
即使您正在运行笔记本,这也会删除所有数字。它不会将编号重置回 1;例如,如果您执行的最后一个单元格是 18,则下一个单元格将是 19。
如果您使用它是因为您想清楚在内核运行期间执行了哪些单元以及尚未执行哪些单元,请使用“单元”>“所有输出”>“清除”(或“编辑" > "Clear All Outputs") 在您启动(或重新启动)内核后立即执行。这在重新启动内核或打开已保存或复制的笔记本时很有用。
这也将从笔记本中删除所有输出。
感谢 user2651084 在之前的评论中对此。
Cell > All Output > Clear
清除所有In []:
数字,但不要为您运行的下一个单元格将它们重置回 1。
Kernel > Restart & Clear Output
重新启动内核,清除输出,清除In []:
数字并将它们重置为1,然后清除输出。
Restart & Run All
不是一个好的解决方案,因为我不想运行所有的东西(这就是笔记本逐个单元运行的目的)。
无论如何,我发现这个解决方案更合理:
Main Menu > Cell > All Output > Clear
对于来自 Google 的用户:
%reset
当您想在笔记本中的某个点之后重置所有变量时,这很有用。它会询问您是否确定要重置。如果您想在不询问的情况下强制重置,请使用:
%reset -f