代码之家  ›  专栏  ›  技术社区  ›  edesz

使用Python dict以编程方式创建nbformat的Jupyter笔记本

  •  0
  • edesz  · 技术社区  · 6 年前

    我正在尝试创建一个Jupyter笔记本,其中有3个标记单元格和3个代码单元格,顺序如下

    Markdown cell 1
    import numpy as np
    import pandas as pd
    
    Markdown cell 2
    project_id=53
    
    Markdown cell 3
    import mysql.connector
    

    我正在使用 this gist 以及 nbformat documentation ,但我已经把线包好了 nb['cells'] = [nbf.v4.new_markdown_cell(text), nbf.v4.new_code_cell(code)] 在蟒蛇体内 for 循环。

    import nbformat as nbf
    
    d = {
    """Markdown cell 1""":
    """\
    import numpy as np
    import pandas as pd
    """,
    """Markdown cell 2""":
    """\
    project_id=53""",
    """Markdown cell 3""":
    """\
    import mysql.connector"""
    }
    
    nb = nbf.v4.new_notebook()
    
    for k, v in d.items():
        nb['cells'] = [nbf.v4.new_markdown_cell(k), nbf.v4.new_code_cell(v) ]
    
    nbf.write(nb, "test.ipynb")
    

    问题

    这将创建Jupyter笔记本文件。但是,笔记本仅包含最后一个标记单元格(标记单元格3)和最后一个代码单元格(代码单元格3)

    • 这是报告的内容 "test.ipynb" 由上述脚本创建的笔记本

      Markdown cell 3
      import mysql.connector
      
    • "测试.ipynb"

      Markdown cell 1
      import numpy as np
      import pandas as pd
      
      Markdown cell 2
      project_id=53
      

    我认为 nb['cells'] 命令正在重复覆盖同一单元格,但我不知道如何解决这个问题。在它创建第一个单元格之后,我不知道如何指示它应该移到下面的下一个单元格。

    问题

    有没有办法创造 倍数 以编程方式在Jupyter笔记本中添加单元格?

    版本

    1. python = 3.6
    2. jupyter notebook = 5.0.0
    3. nbformat==4.4.0
    1 回复  |  直到 6 年前
        1
  •  1
  •   Bob Baxley    6 年前

    这里有几个问题。

    1) 您正在覆盖 cells

    如果需要六个单元格(dict键后跟dict值),请尝试以下操作:

    nb['cells'] = []
    for k, v in d.items():
        nb['cells'].extend([nbf.v4.new_markdown_cell(k), nbf.v4.new_code_cell(v) ])
    

    这将在循环的每个迭代中添加一个标记单元格和一个代码单元格。

    nb['cells'] = []
    for v in d.values():
        nb['cells'].append(nbf.v4.new_code_cell(v))