Подтвердить что ты не робот

Как я могу открыть ноутбук IPython без вывода?

У меня есть IPython-ноутбук, где я случайно сбросил огромный выход (15 Мб), который разбил ноутбук. Теперь, когда я открываю ноутбук и пытаюсь удалить неприятную ячейку, ноутбук снова падает, что мешает мне устранить проблему и восстановить работоспособность ноутбука.

Лучшее решение, которое я могу придумать, - это вручную вставить ячейки ввода в новый ноутбук, но есть ли способ открыть ноутбук без каких-либо выходов?

4b9b3361

Ответ 1

Этот хороший сниппет (который я использую как git commit hook), чтобы удалить вывод из ноутбука ipython:

#!/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")

Вы можете легко сделать его немного приятнее в использовании, в настоящее время вам придется называть его

strip_output.py < my_notebook.ipynb > my_notebook_stripped.ipynb

Ответ 2

Если вы используете jupyter 4.x, вы получите предупреждения об отказе от API при запуске filmor script. Хотя script все еще работает, я немного обновляю script, чтобы удалить предупреждения.

#!/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")