2017-05-25 611 views
3

在Jupyter中,有两种方法可将笔记本导出为其他格式,在命令行或库中使用nbconvert。两者都要求您将原始笔记本作为输入(作为文件名或JSON数据)。从当前Jupyter笔记本中提取所有单元格数据

我想要做的事实质上是自动的,自包含的报告生成,即使用笔记本内的nbconvert库,将相同的笔记本导出为执行时的HTML/PDF。我设想在文档的最后一个单元格中输出代码,并指示忽略导出的最后一个单元格。

我的问题是获取数据。在笔记本内,我可以通过In[1],Out[2]等访问代码单元,但AFAIK没有降价单元的这种功能。也没有(官方)方法来获取笔记本的名称(没有__file__属性)以这种方式传递信息。

有很多例子可以从其他笔记本中获取所有单元格数据 - 但是有没有办法从当前笔记本中访问所有单元格数据?

回答

1

你可以用笔记本文件名和nbconvert来做这件事,就像你猜测的那样。做一些东西客户端可能需要扩展,我可以设想一个服务器扩展来做转换,以及你在最后一个代码单元中写入的一些JS,例如渲染一个按钮,然后将笔记本返回到转换器服务器扩展。隐藏某些单元格(例如Js单元格),您可以在转换扩展程序中使用,或者使用单元格元数据和nbconvert模板。鉴于架构的灵活性,有很多方法可以做到这一点

+0

谢谢蒂姆。你是对的,当然,我可以使用nbconvert传递文件名。我想我是以我的方式尝试它(想要访问单元格数据),以便我能更全面地控制,例如写入报告的单元格以及报告的名称和位置。 AFAIK nbconvert路线将要求报告文件具有与笔记本相同的名称和路径(并且笔记本要知道自己的名字,这可能会随着笔记本的传递而轻易改变)。 – blackgore

+0

所以我在这种情况下的解决方案是写一些JavaScript添加元数据到客户端上的笔记本json(即写一个文件位置的表单,要保存的单元格等),然后将笔记本json发送到自定义服务器扩展并解析元数据,然后根据需要使用自定义模板/预处理笔记本json将其交给nbconvert。 –