2

将 ipython 笔记本保存到脚本时是否可以关闭魔术功能或任意单元块?

我使用保存.ipynb文件的模式也会自动保存.py,但是我使用的魔术函数会破坏脚本。我试过像

magic_cmd = """%cd ~/
%load_ext autosave
%autosave 30
"""
if in_ipython():
    eval(magic_cmd)

这显然不喜欢魔法函数并抛出一个 SyntaxError (我宁愿不使用eval无论如何......)。是否有一些我可以使用的 Javascript 代码来阻止单元格保存?

所以问题的两个部分:

  1. 有什么办法可以防止所有魔术功能保存到脚本?
  2. 有没有办法阻止任意单元格保存到脚本,或者说,低于某个点的所有单元格都保存到脚本(类似于“单元格 > 上面运行”命令)?
4

1 回答 1

2

我不知道有什么方法可以阻止它被保存到脚本中,但是您可以(1)添加一个测试以确保魔法只在 ipython 中执行,以及(2)将基本魔法语法转换为普通python可以接受

magic_cmds = """%cd ~/
%load_ext autosave
%autosave 30
"""
if in_ipython():
    for magic_cmd in magic_cmds.splitlines() :
        get_ipython().magic(magic_cmd[1:])

这适用于 ipython 和 python,除了 python 显然不执行命令。请注意,如果您%从字符串中删除符号,则应[1:]从最后一行中删除。

就个人而言,我更喜欢以下版本,因为它会在in_ipython未定义时捕获异常,尽管您当然可以try以相同的方式将 a 添加到上面。

try :
    if(__IPYTHON__) :
        get_ipython().magic(u'cd ~/')
        get_ipython().magic(u'load_ext autosave')
        get_ipython().magic(u'autosave 30')
except NameError :
    pass

编辑

细胞魔法同样可以包括在内。例如,翻译一个 ipython 单元格

%%R -o x
x <- c(1,2,3)

你会写

get_ipython().run_cell_magic(u'R', u'-o x', u'x <- c(1,2,3)')

除了内置帮助文本之外,我找不到有关此命令的更多信息,但我认为这些参数是不言自明的。当然,通过在字符串中插入换行符('\n'),也可以在第三个参数中使用多行输入。

更一般地说,如果你想翻译一些东西,只需将它写在笔记本上,然后单击File-> Download as...-> Python (.py),然后查看你得到的脚本。

于 2013-09-28T14:44:41.940 回答