以编程方式将单元格添加到ipython笔记本以生成报表

zac*_*ach 18 ipython ipython-notebook reproducible-research

我已经看到了iPython开发人员关于如何将ipython笔记本转换为博客文章,pdf,甚至整本书的一些谈话 (约43分钟).的PDF到X转换器解释其被写在降价或代码的IPython的细胞和在一个步骤中吐出新格式化的文档.

我的问题是我想生成一个大型文档,其中许多图形和部分是以编程方式生成的 - 就像这样.为了使用上面的方法在iPython中工作,我需要能够编写一个能编写其他iPython-Code-Blocks的函数.这种能力是否存在?

#some pseudocode to give an idea
for variable in list:
    image = make_image(variable)
    write_iPython_Markdown_Cell(variable)
    write_iPython_Image_cell(image)
Run Code Online (Sandbox Code Playgroud)

我认为这可能有用,所以我想知道是否:

  1. 通过iPython生成iPython Cells是可能的
  2. 如果这是一个坏主意的原因,我应该坚持像模板库(Jinja)这样的"经典"解决方案.

谢谢,zach cp

编辑:根据托马斯的建议,我在ipython邮件列表上发布了一些关于这个想法的可行性的反馈.简而言之 - 有一些技术上的困难使得这个想法不太适合原始想法.对于您想要生成markdown -cells和相应图像/表的重复报告,通过ipython内核/浏览器工作比直接使用像Jinja这样的模板系统生成报告要复杂得多.

小智 16

还有费尔南多·佩雷斯笔记本要点这里演示如何以编程方式创建新的细胞.请注意,您还可以传入元数据,因此,如果您要生成报告并希望将笔记本转换为幻灯片,则可以轻松指示该单元格应该是幻灯片,子幻灯片,片段等.

你可以添加任何类型的单元格,所以你想要的东西现在很简单(虽然问题被提出时可能不是这样!).例如,像这样的(未经测试的代码)应该工作:

from IPython.nbformat import current as nbf

nb = nbf.new_notebook()

cells = []

for var in my_list:
    # Assume make_image() saves an image to file and returns the filename
    image_file = make_image(var)
    text = "Variable: %s\n![image](%s)" % (var, image_file)
    cell = nbf.new_text_cell('markdown', text)
    cells.append(cell)

nb['worksheets'].append(nbf.new_worksheet(cells=cells))

with open('my_notebook.ipynb', 'w') as f:
        nbf.write(nb, f, 'ipynb')
Run Code Online (Sandbox Code Playgroud)


Tho*_*s K 10

我不会判断它是否是一个好主意,但是如果你get_ipython().set_next_input(s)在笔记本中调用它,它将创建一个带有字符串的新单元格s.这是IPython的内部使用其%load%recall命令.


Tun*_*sia 7

请注意,Tal 接受的答案有点过时并且越来越不推荐:在 ipython v3 中,您可以(/应该)nbformat直接导入,之后您需要指定要创建的笔记本版本。

所以,

from IPython.nbformat import current as nbf

变成

from nbformat import current as nbf

变成

from nbformat import v4 as nbf

然而,在这个最终版本中,兼容性中断,因为该write方法位于父模块中nbformat,Fernando Perez 使用的所有其他方法都在该v4模块中,尽管其中一些方法名称不同(例如,new_text_cell('markdown', source)变成new_markdown_cell(source))。

下面是 v3 做事方式的一个例子:查看generate_examples.py代码和plotstyles.ipynb输出。在撰写本文时,IPython 4 非常新,以至于使用 Web 界面并单击“新笔记本”仍会生成 v3 笔记本。