如何清除来自 Linux 终端的所有单元中的 Jupiter Notebook 输出?

我有一个问题时,从笔记本电脑的输出真的很长,它保存到笔记本电脑,任何时候,我想再次打开这个特定的笔记本电脑浏览器崩溃,无法正确显示。

为了解决这个问题,我必须用一个文本编辑器打开它,并删除该单元格中导致问题的所有输出。

我想知道是否有一种方法可以清理所有的输出从笔记本电脑,以便可以再次打开它没有问题。我想删除所有的输出,因为删除一个特定的似乎更麻烦。

68510 次浏览

Nb 转换6.0应该修复 --clear-output

该选项已经中断了很长时间以前,错误报告与合并补丁: https://github.com/jupyter/nbconvert/issues/822

用途应为就地操作:

jupyter nbconvert --clear-output --inplace my_notebook.ipynb

或者保存到另一个名为 my_notebook_no_out.ipynb的文件:

jupyter nbconvert --clear-output \
--to notebook --output=my_notebook_no_out my_notebook.ipynb

This was brought to my attention 哈罗德在评论中写道.

Before nbconvert 6.0: --ClearOutputPreprocessor.enabled=True

--clear-output的用法相同:

jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace my_notebook.ipynb
jupyter nbconvert --ClearOutputPreprocessor.enabled=True \
--to notebook --output=my_notebook_no_out my_notebook.ipynb

Tested in Jupyter 4.4.0, notebook==5.7.6.

使用 —— ClearOutputPreprocessor.abled = True- 清除-输出

遵循以下命令:

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

Use Clean _ ipynb, which not only clears notebook output but can also clean the code.

通过 pip install clean_ipynb安装

clean_ipynb hello.ipynb运行

如果创建 .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 | .'"

要扩展@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"

Repo/. gitproperties

*.ipynb filter=strip-notebook-output

Repo/git _ configure. sh

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

用户只需要运行:

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

我必须说,对于清除一些子数组和重置一些执行编号这样简单的工作,我发现 jupyer nbconvert的速度慢得令人痛苦。在可维护性方面,这是一个优越的解决方案,因为如果笔记本源代码格式发生了变化,那么这个工具就需要更新。但是,下面的替代解决方案更快,如果您没有 nbConverv6.0(我目前有一个运行5.6.1的环境... ...) ,那么它可能也很有用

一个非常简单的 jq(json 的一种 sed)脚本可以非常快地完成这个任务:

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

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


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

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

nbstripout对我很管用。

打开 Jupiter 终端,导航到包含笔记本的文件夹,然后运行以下代码行:

nbstripout my_notebook.ipynb

As mentioned in one of the previous answers you can use the command-line json processor jq to perform this task notably quicker than with nbconvert. A complete command for getting rid of metadata, outputs and execution counts can be found in this 博客文章:

jq --indent 1 \
'
(.cells[] | select(has("outputs")) | .outputs) = []
| (.cells[] | select(has("execution_count")) | .execution_count) = null
| .metadata = {"language_info": {"name":"python", "pygments_lexer": "ipython3"}}
| .cells[].metadata = {}
' 01-parsing.ipynb

如果需要,您可以修改为只清理输出的特定部分,比如执行计数(在 json 中出现的任何地方递归地执行) ,然后将其添加为 git 过滤器:

[filter "nbstrip"]
clean = jq --indent 1 '(.. |."execution_count"? | select(. != null)) = null'
smudge = cat

然后在 ~/.config/git/attributes中添加以下内容,将过滤器应用于全球范围内的所有本地回购协议:

*.ipynb filter=nbstripout

也有 脱衣舞,这是为此目的,但它有点慢。