如何重置 Jupiter/IPython 输入提示符编号?

我刚刚使用 IPython 笔记本编写了我的第一个详细的 Python 教程。一切都很顺利,除了我做了很多测试和移动块周围。如何重置 In [ ]:编号?我试过退出和重新装弹,但似乎没有工作。

66801 次浏览

You can reset the kernel (shortcut: C-m .) and re-run the whole notebook.

Quitting and reloading doesn't work because the code is not re-evaluated.

I think, the only way to to what you want is: - 'Kernel > Restart' (restart the kernel) and then 'Cell > Run All' (run the script).

Every .ipynb file can be opened in an editor. Everything written there is in plain text (JSON). For each cell which has the "cell_type": "code" there'd be another key-value pair as "execution_count": <number>. As you might have guessed, that is the prompt numbering. Hence, if the notebook contains code which will take time to execute (as was, in my case) this method would be time efficient.

Now, either you can manually change each execution_count or write a simple script to get the numbering right. To check the results just refresh the notebook in the browser without stopping the kernel. And, everything will be as per your needs, even all the variables/loaded data will remain in the environment.

'Kernel' -> 'Restart & Run All'

Just make sure you saved your Notebook. You can also bind/assign keyboard key for running this command.

'Help' -> 'Edit Keyboard Shortcuts'

If what you want is to remove the numbers themselves, so that each cell shows In [ ] (instead of something like In [247] which is leftover from some previous incarnation of the kernel), use "Cell" > "All Output" > "Clear" (in Jupyter Notebook 5.4.0) or "Edit" > "Clear All Outputs" (In Jupyter Lab 0.32.1).

This will remove all the numbers, even if you're in the middle of running a notebook. It will not reset the numbering back to 1; e.g. if the last cell you executed was 18, the next will be 19.

If you're using this because you want clarity about which cells you've executed during this run of the kernel and which cells you haven't executed yet, use "Cell" > "All Output" > "Clear" (or "Edit" > "Clear All Outputs") immediately after you start (or restart) the kernel. This can be useful when restarting a kernel, or when opening a saved or duplicated notebook.

This will also remove all outputs from the notebook.

Thanks to user2651084 in a previous comment for this.

Cell > All Output > Clear Clear all In []: numbers but do not reset them back to 1 for the next cell you run.

Kernel > Restart & Clear Output Restart the kernel, clear output, clear In []: numbers and reset them to 1, and clear output.

I'm a bit too late, but I had the same problem, and since my notebook had cells with execution time up to 5 minutes, I had to wait a long time until Restart & Run All finished.

So I've made a Python script to make this task for me:

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)

But be careful with the execution order and the variables in your cells, since applying the script above on your notebook can generate a different output if you run the notebook again. For example, let's suppose your notebook have the following cells with the execution order in square brackets:

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


Out[3]: 1

If you apply the above script into your notebook, it'll show the following:

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


Out[3]: 1

But if you run the notebook again, it'll show the following:

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


Out[3]: 2

This can be a bit confusing for people who are downloading your notebook via GitHub for example, since they can see an output in the repository, but when they run on their machine, the output will be different.

Restart & Run All isn't a good solution, because simply I don't want to run all (and that's the purpose of a notebook to run things cell by cell).

Anyways, I found this solution more plausible:

Main Menu > Cell  > All Output > Clear

For those coming from Google:

%reset

This is useful when you want to reset all variables after a certain point in the notebook. It is going to ask if you are sure that you want to reset. If you want to force reset without asking, then use:

%reset -f

Here is how to clear the execution numbers to [ ] without re-running the whole notebook:

  1. Just to be safe, make a copy of your notebook:
cp notebook.ipynb notebook_copy.ipynb
  1. Open your notebook with vim:
vim notebook.ipynb
  1. In vim, reset the execution numbers with the following search-replace command:
:%s/"execution_count":.*/"execution_count": null,/gc
  1. You will then get the following prompt. Type a to replace all occurrences:
replace with "execution_count": null, (y/n/a/q/l/^E/^Y)? a
  1. Save notebook and quit vim:
:wq