python - 防止单元格或魔法函数保存到 python 脚本

标签 python ipython jupyter-notebook

将 ipython 笔记本保存到脚本时是否可以关闭魔法函数或任意单元格 block ?

我使用的模式保存 .ipynb 文件也会自动保存到 .py ,但我使用的神奇函数会破坏脚本。我尝试过类似的事情

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

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

问题分为两部分:

  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

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/

相关文章:

python - 用python找到最大间隔重叠点的最有效方法

python - 处理 numpy/pandas 中的零日志值

ipython - 在单独的命名空间中执行另一个 ipython notebook

python - 在 Python Jupyter 笔记本中使用 rpy2 安装 Bioconductor 包

python - IPython笔记本: how do I change the text color in output cells?

python - 计算 tensorflow 梯度

python - 使用 python 更新语句不适用于 sqlite3

pandas - 绘制包含 NaN 的 Pandas 数据框

python - 如何在 linux 下使用 anaconda 安装多个 ipython 3.0 内核(python 2.7、python 3.4 等)?

linux - MiniZinc 在 Jupyter/Linux 中的输出命令