How do I reset the Jupyter/IPython input prompt numbering?

前端 未结 9 1097
孤街浪徒
孤街浪徒 2021-02-02 05:08

I just wrote my first extensive Python tutorial using IPython notebooks. All went well, except I did a lot of testing and moving blocks around. How do I reset the In [

9条回答
  •  孤独总比滥情好
    2021-02-02 05:27

    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.

提交回复
热议问题