防止 Jupyter 笔记本中的单元保存到磁盘

Geo*_*ing 5 jupyter jupyter-notebook

我有一个 Jupyter Python 笔记本,其中一个特定单元具有非常大的视觉输出(数兆字节的 Javascript,包括嵌入数据)。有没有办法标记单元格,以便输出不保存到文件中.ipynb

Aro*_*dia 3

我不知道有什么方法可以在不安装 Jupyter 扩展的情况下执行此操作。我认为这可以在前端完成,例如,使用 JS 代码模板创建一个小部件扩展,然后将模板填充为输出,因为小部件状态是有选择地保存的。

如果您想要一个工作量最少的合理解决方案,并且您可以修改 Jupyter 服务器环境,我建议使用jupyter_notebook_config.py. 文档中已经有一个剥离输出的示例。我已经修改了它(但没有测试它!)以删除标记为 的单元格的 JS 输出no-save

def scrub_output_pre_save(model, **kwargs):
    """scrub output before saving notebooks"""
    # only run on notebooks
    if model['type'] != 'notebook':
        return
    # only run on nbformat v4
    if model['content']['nbformat'] != 4:
        return

    for cell in model['content']['cells']:
        if cell['cell_type'] != 'code':
            continue
        metadata = cell['metadata']
        if 'tags' in metadata and 'no-save' in metadata['tags']:
            cell['outputs'] = []
            cell['execution_count'] = None


 c.FileContentsManager.pre_save_hook = scrub_output_pre_save
Run Code Online (Sandbox Code Playgroud)

如果您需要可安装/可重用,可以将上述代码打包并作为Jupyter 服务器扩展进行分发。