答案似乎涉及nbformat
并且它已经存在于本网站上,但是对于以这种技术语言提出的问题,我认为值得将该问题简化为我的简单英语版本以帮助/允许其他人发现它(我适当地赞成另一个答案)。
def perform_post_exec_cleanup(output_nb_name, tag_to_del='injected-parameters'):
import json
from traitlets.config import Config
from nbconvert import NotebookExporter
import nbformat
c = Config()
c.TagRemovePreprocessor.enabled=True # to enable the preprocessor
c.TagRemovePreprocessor.remove_cell_tags = [tag_to_del]
c.preprocessors = ['TagRemovePreprocessor'] # previously: c.NotebookExporter.preprocessors
nb_body, resources = NotebookExporter(config=c).from_filename(output_nb_name)
nbformat.write(nbformat.from_dict(json.loads(nb_body)), output_nb_name, 4)
注意事项
通常可以在运行剥离代码的同一笔记本中就地执行此类笔记本转换/单元剥离。execute_notebook()
不适用于 papermill - 当使用 papermill 的功能控制其代码执行时,它不会在输出笔记本中工作。在函数完成或中断执行后,它必须在外部(控制器)笔记本中运行。因为输出notebook在这个过程中是增量保存到磁盘的,如果要保证injected-parameters
cell不会被永久保存,需要无条件运行上面的剥离代码,即使papermill函数失败,所以放入你的finally
部分try-except-finally
。
[基于:使用 nbconvert 作为库运行预处理器]