【问题标题】:How to insert new lines in Jupyter notebook by code如何通过代码在 Jupyter notebook 中插入新行
【发布时间】:2020-07-20 19:03:06
【问题描述】:

我有一个笔记本模板,我将按需填写。

假设我必须阅读 n 个 pandas 数据帧

笔记本模板看起来像:

#df_id#
#df_path#

当我创建它时,我想要得到类似的东西

#[input_data_id: 1]
df1 = pd.read_csv('path1')

#df_id#
#paths#

就像复制标签,用每个新参数填充它们并重复

问题是我看不到如何在 jupyter notebook 中通过代码插入新行

我尝试了不同的方法来避免这种情况,目前这是我正在使用的方法:

for id_path in input_list:
    id_aux = id_path[0]
    path_aux = id_path[1]
    os.system("""sed -i "s|#paths#|'{0}', #paths#|" {1} """.format(path_aux,
                      file_path))
    os.system("""sed -i "s|#input_ids#|{0}, #input_ids#|" {1}""".format(id_aux,
                      file_path))

结果如下:

paths = [
    'path1','path2','path3'
]

我可以遍历它并读取另一个数组中的 dfs,所以最后我可以处理它,但我希望它看起来比现在更好,并且我需要在其中插入新行jupyter 笔记本单元格。

我已经研究了几天,但没有任何效果,我试图让它变得简单,首先从这里做我的数组外观

paths = [
    'path1','path2','path3'
]

到这里:

paths = [
    'path1',
    'path2',
    'path3',
]

代码是这样的

os.system("""sed -i "s|#paths#|'{0}',\n","    #paths#|" {1} """.format(path_aux_mod,file_path))

但它不起作用。目前我对如何处理它一无所知,因为它不仅是 sed 命令(我一直在阅读而且我对插入换行符不太自信,而且还有 jupyter notebook cell format 这使得单元格如下所示:

这个python代码

paths = [
    'path1',
    'path2',
    'path3
]

在 .ipynb 文件中

"paths = [\n",
"    'path1',\n",
"    'path2',\n",
"    'path3'\n",
"]\n",

我不确定是否能够使用单元格内的标签“更改”单元格格式。

【问题讨论】:

  • 在尝试从模板生成笔记本之前,您是否考虑过保持笔记本静态并使其从与笔记本一起交付的生成数据文件中读取所有特定内容(ID、路径...)?
  • 好吧,如果你必须生成笔记本,首先,为了提高效率,我建议避免在循环中触发系统命令,这会带来一些严重的开销。 IMO 最好预先格式化给定占位符的所有值,然后在一次调用中替换它。然后,由于 jupyter 笔记本使用 json 格式,我建议不要使用不适合这种结构化数据的 sed(即使我喜欢 sed !)。由于你已经在使用python,它的json库是一个自然的选择,否则jq是另一个基于函数式编程的强大工具。

标签: python sed jupyter-notebook


【解决方案1】:

是的,只要你说,我改变了整个逻辑。我现在没有使用 sed 并尝试替换一些标签,而是使用 python 的 json 包读取 .ipynb,因为“模板”是静态的,我的意思是,读取输入的句子总是相同的单元格等。我可以使用 json 访问关键的“单元格”,并在它们作为列表工作时附加新句子。

它带来了更有效和更清晰的解决方案。谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2021-06-06
    • 2020-04-03
    • 2018-07-29
    相关资源
    最近更新 更多