将 ipython 笔记本保存到脚本时是否可以关闭魔法函数或任意单元格 block ?
我使用的模式保存 .ipynb
文件也会自动保存到 .py
,但我使用的神奇函数会破坏脚本。我尝试过类似的事情
magic_cmd = """%cd ~/
%load_ext autosave
%autosave 30
"""
if in_ipython():
eval(magic_cmd)
它显然不喜欢魔术函数并抛出一个 SyntaxError (无论如何我宁愿不使用 eval
...)。我可以使用一些 Javascript 代码来阻止单元格保存吗?
问题分为两部分:
- 有什么方法可以阻止所有魔法函数保存到脚本中吗?
- 是否有任何方法可以阻止任意单元格保存到脚本,或者说,某个点以下的所有单元格都不能保存到脚本(类似于“单元格 > 运行以上所有内容”命令)?
最佳答案
我不知道有什么方法可以阻止它被保存到脚本中,但是您可以(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'),也可以在第三个参数中使用多行输入。
更一般地说,如果您想翻译某些内容,只需将其写在笔记本中,然后单击文件
-> 下载为...
-> Python (.py)
,然后查看您得到的脚本。
关于python - 防止单元格或魔法函数保存到 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16485972/