如何在Linux终端的所有单元格中清除IPython Notebook的输出?

时间:2015-03-06 21:54:34

标签: linux ipython-notebook

当笔记本电脑的输出非常长并且保存到笔记本电脑中时,我遇到了问题,只要我想再次打开这个特定的笔记本电脑,浏览器就会崩溃,无法正确显示。

要解决此问题,我必须使用文本编辑器打开它并删除该单元格的所有输出,从而导致问题。

我想知道是否有办法清理笔记本中的所有输出,这样可以再次打开它而不会出现问题。我想删除所有输出,因为删除一个特定的输出似乎更麻烦。

6 个答案:

答案 0 :(得分:37)

<强> --ClearOutputPreprocessor.enabled=True

现在有一个内置的命令行选项:

jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace Notebook.ipynb

或另一个名为NotebookNoOut.ipynb的文件:

jupyter nbconvert --ClearOutputPreprocessor.enabled=True \
  --to notebook --output=NotebookNoOut Notebook.ipynb

jupyter nbconvert --help还会记录--clear-output选项,但由于某种原因它无效。

在Jupyter 4.4.0中测试过,笔记本== 5.7.6。

答案 1 :(得分:3)

使用clean_ipynb,不仅可以清除笔记本的输出,还可以清除代码。

通过pip install clean_ipynb安装

clean_ipynb hello.ipynb运行

答案 2 :(得分:3)

如果您创建.gitattributes file,则可以在将某些文件添加到git之前对其进行过滤。这会将原始文件保留在磁盘上,但会提交“已清理”版本。

要使其正常工作,请将其添加到本地.git/config或全局~/.gitconfig

[filter "strip-notebook-output"]
    clean = "jupyter nbconvert --ClearOutputPreprocessor.enabled=True --to=notebook --stdin --stdout --log-level=ERROR"

然后在带有笔记本的目录中创建一个.gitattributes文件, 内容:

*.ipynb filter=strip-notebook-output

这是如何工作的:

  • 该属性告诉git在将其添加到索引(暂存)之前,对每个笔记本文件运行过滤器的clean操作。
  • 过滤器是我们的朋友nbconvert,设置为从stdin读取,写入stdout,剥离输出以及仅在有重要要说的地方发言。
  • 从索引中提取文件时,将运行过滤器的smudge操作,但这是空操作,因为我们没有指定它。您可以在此处运行笔记本以重新创建输出(nbconvert --execute)。
  • 请注意,如果过滤器因某种原因失败,则文件将暂存为未转换状态。

我对这个过程的唯一小抱怨是我可以提交.gitattributes,但是我必须告诉我的同事更新他们的.git/config

如果您想要一个骇客但快得多的版本,请尝试JQ

  clean = "jq '.cells[].outputs = [] | .cells[].execution_count = null | .'"

答案 3 :(得分:2)

要扩展@dirkjot的答案以解决有关共享配置的问题:

创建本地.gitconfig文件,而不是修改.git / config。这使得需要在其他计算机上运行的命令稍微简单一些。您还可以创建脚本来运行git config命令:

git config --local include.path ../。gitconfig

请注意,我也已将日志级别更改为INFO,因为我确实想查看确认清理正在运行。

repo / .gitconfig

[filter "strip-notebook-output"]
    clean = "jupyter nbconvert --ClearOutputPreprocessor.enabled=True --to=notebook --stdin --stdout --log-level=INFO"

回购/.git属性

*.ipynb filter=strip-notebook-output

repo / git_configure.sh

git config --local include.path ../.gitconfig

然后,用户只需要运行:

$ chmod u+x git_configure.sh
$ ./git_configure.sh

答案 4 :(得分:0)

我必须说,对于清除一些子数组和重置一些执行编号的简单工作,我发现 jupyer nbconvert 非常缓慢。这是一个在可维护性方面的卓越解决方案,因为如果 notebook 源代码格式发生变化,该工具有望得到更新。但是,如果您没有 nbconvert 6.0(我目前有一个运行 5.6.1 的环境……)

一个非常简单的 jq (a sort of sed for json) 脚本可以非常快速地完成这个技巧:

jq 'reduce path(.cells[]|select(.cell_type == "code")) as $cell (.; setpath($cell + ["outputs"]; []) | setpath($cell + ["execution_count"]; null))' notebook.ipynb

很简单,它识别代码单元,并分别用 outputsexecution_count 替换它们的 []null 属性。


<子>

或者如果您只想删除输出并保留执行编号,您可以做的更简单:

jq 'del(.cells[]|select(.cell_type == "code").outputs[])' notebook.ipynb

答案 5 :(得分:-1)

使用 - ClearOutputPreprocessor.enabled = True - clear-output

遵循以下命令:

jupyter nbconvert --ClearOutputPreprocessor.enabled=True --clear-output *.ipynb