当笔记本电脑的输出非常长并且保存到笔记本电脑中时,我遇到了问题,只要我想再次打开这个特定的笔记本电脑,浏览器就会崩溃,无法正确显示。
要解决此问题,我必须使用文本编辑器打开它并删除该单元格的所有输出,从而导致问题。
我想知道是否有办法清理笔记本中的所有输出,这样可以再次打开它而不会出现问题。我想删除所有输出,因为删除一个特定的输出似乎更麻烦。
答案 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)
答案 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
这是如何工作的:
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
很简单,它识别代码单元,并分别用 outputs
和 execution_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