我试图按以下顺序创建一个具有3个降价单元和3个代码单元的Jupyter笔记本
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)]
包装在Python 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笔记本文件。但是,笔记本仅包含最后一个Markdown单元(Markdown单元3)和最后一个代码单元(Code单元3)
这是由上述脚本创建的"test.ipynb"
笔记本的内容
Markdown cell 3
import mysql.connector
这是"test.ipynb"
笔记本中丢失的内容
Markdown cell 1
import numpy as np
import pandas as pd
Markdown cell 2
project_id=53
我认为nb['cells']
命令正在重复覆盖同一单元格,但是我不知道如何解决此问题。创建第一个单元格后,我不知道如何指示它应移至下面的下一个单元格。
问题
是否可以通过编程在Jupyter笔记本中创建多个单元格?
版本
python
= 3.6 jupyter notebook
= 5.0.0 nbformat==4.4.0
答案 0 :(得分:1)
这里有几个问题。
1)您将在循环的每次迭代中覆盖cells
列表。
2)单元格是markdown或code,尚不清楚为什么您要使用字典中包含看起来像markdown的键和看起来像是code的值。您总共要制作6个单元格还是3个单元格?
如果您想要六个单元格-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) ])
这将在循环的每次迭代中添加一个markdown单元格和一个代码单元格。
如果只需要代码单元,则可以尝试以下操作:
nb['cells'] = []
for v in d.values():
nb['cells'].append(nbf.v4.new_code_cell(v))