保持单元格或魔术函数不保存到python脚本

时间:2013-05-10 15:42:31

标签: python ipython ipython-notebook

将ipython notebook保存到脚本时是否可以关闭魔术函数或任意单元格块?

我使用保存.ipynb文件的模式也会自动保存到.py,但我使用的神奇功能会破坏脚本。我尝试过像

这样的事情
magic_cmd = """%cd ~/
%load_ext autosave
%autosave 30
"""
if in_ipython():
    eval(magic_cmd)

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

问题的两个部分:

  1. 有没有办法让所有魔术函数保存到脚本?
  2. 有没有办法让任何单元格保存到脚本,或者说保存到脚本以下的所有单元格(类似于'Cell> Run all all'命令)?

1 个答案:

答案 0 :(得分: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

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 - &gt; Download as... - &gt; Python (.py),然后查看您获得的脚本。