将ipython notebook保存到脚本时是否可以关闭魔术函数或任意单元格块?
我使用保存.ipynb
文件的模式也会自动保存到.py
,但我使用的神奇功能会破坏脚本。我尝试过像
magic_cmd = """%cd ~/
%load_ext autosave
%autosave 30
"""
if in_ipython():
eval(magic_cmd)
显然不喜欢魔术函数并抛出一个SyntaxError(我宁愿不使用eval
......)。是否有一些我可以使用的Javascript代码只是阻止单元格保存?
问题的两个部分:
答案 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)
,然后查看您获得的脚本。