Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I open an IPython notebook without the output?

I have an IPython notebook where I've accidentally dumped a huge output (15 MB) that crashed the notebook. Now when I open the notebook and attempt to delete the troublesome cell, the notebook crashes again—thus preventing me from fixing the problem and restoring the notebook to stability.

The best fix I can think of is manually pasting the input cells to a new notebook, but is there a way to just open the notebook without any outputs?

like image 627
wil3 Avatar asked Aug 07 '14 08:08

wil3


3 Answers

There is this nice snippet (that I use as a git commit hook) to strip the output of an ipython notebook:

#!/usr/bin/env python

def strip_output(nb):
    for ws in nb.worksheets:
        for cell in ws.cells:
            if hasattr(cell, "outputs"):
                cell.outputs = []
            if hasattr(cell, "prompt_number"):
                del cell["prompt_number"]


if __name__ == "__main__":
    from sys import stdin, stdout
    from IPython.nbformat.current import read, write

    nb = read(stdin, "ipynb")
    strip_output(nb)
    write(nb, stdout, "ipynb")
    stdout.write("\n")

You can easily make it a bit nicer to use, currently you'd have to call it as

strip_output.py < my_notebook.ipynb > my_notebook_stripped.ipynb
like image 91
filmor Avatar answered Oct 21 '22 13:10

filmor


you can use cli to clear outputs

jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace Notebook.ipynb
like image 26
Shumaila Ahmed Avatar answered Oct 21 '22 11:10

Shumaila Ahmed


If you are running jupyter 4.x, you will get some API deprecation warnings when running filmor's script. Although the script still works, I update the script a bit to remove the warnings.

#!/usr/bin/env python

def strip_output(nb):
    for cell in nb.cells:
        if hasattr(cell, "outputs"):
            cell.outputs = []
        if hasattr(cell, "prompt_number"):
            del cell["prompt_number"]


if __name__ == "__main__":
    from sys import stdin, stdout
    from nbformat import read, write

    nb = read(stdin, 4)
    strip_output(nb)
    write(nb, stdout, 4)
    stdout.write("\n")
like image 14
Edward Fung Avatar answered Oct 21 '22 13:10

Edward Fung