我有一台IPython笔记本,我不小心丢弃了一个巨大的输出(15 MB),导致笔记本电脑崩溃。现在,当我打开笔记本电脑并尝试删除麻烦的电池时,笔记本电脑再次崩溃 - 从而阻止我解决问题并使笔记本电脑恢复稳定。
我能想到的最佳解决方案是手动将输入单元格粘贴到新笔记本上,但是有没有办法只打开笔记本而没有任何输出?
答案 0 :(得分:15)
有一个很好的片段(我用作git提交钩子)来剥离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
答案 1 :(得分:8)
如果您运行的是jupyter 4.x,则在运行filmor's script时会收到一些API弃用警告。虽然脚本仍然有效,但我稍微更新了脚本以删除警告。
#!/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")
答案 2 :(得分:2)
这是@Edward Fung 的回答的进一步修改,它将把清理过的笔记本输出到一个新文件,而不是依赖于 stin
和 stout
from nbformat import read, write
def strip_output(nb):
for cell in nb.cells:
if hasattr(cell, "outputs"):
cell.outputs = []
if hasattr(cell, "prompt_number"):
del cell["prompt_number"]
nb = read(open("my_notebook.ipynb"), 4)
strip_output(nb)
write(nb, open("my_notebook_cleaned.ipynb", "w"), 4)
答案 3 :(得分:-1)