使用魔术单元%%writefile 时,似乎ipython 将单元格的内容视为纯文本,不会执行它。

有没有办法在单元格中运行代码,然后自动将其导出到某个脚本文件?

这很有用,因为它使您能够以编程方式将笔记本与仅保留笔记本某些部分的脚本同步。

在 notebook 中,有些代码只是脚手架,将 notebook 下载为 py 脚本会包含这些不必要的代码。同时,您可能需要重新构建文档,将两个代码块放在一起,而在笔记本中,它们之间有很多草稿内容。

丑,上面的所有事情都可以通过手动复制代码来完成。但它会使以后的维护充满繁琐的复制和粘贴工作。

最佳答案

感谢作者的解答。我认为完整的代码对其他人有用:

from IPython.core.magic import register_cell_magic


@register_cell_magic
def write_and_run(line, cell):
    argz = line.split()
    file = argz[-1]
    mode = 'w'
    if len(argz) == 2 and argz[0] == '-a':
        mode = 'a'
    with open(file, mode) as f:
        f.write(cell)
    get_ipython().run_cell(cell)

您可以在Jupiter笔记本中声明这一点。将单元格标记为:
%%write_and_run some.py

或者
%%write_and_run -a some.py

10-06 06:17