2

ipythonノートブックをスクリプトに保存するときに、マジック関数または任意のセルブロックをオフにすることは可能ですか?

.ipynbファイルを保存すると自動的に保存されるモードも使用しますが、.py使用する魔法の関数はスクリプトを壊します。私は次のようなことを試しました

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

どうやら魔法の関数が好きではなく、SyntaxErrorをスローします(evalとにかく使用したくない...)。セルが保存されないようにするために使用できる Javascript コードはありますか?

したがって、質問の2つの部分:

  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_ipythona を追加することもできます。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') を挿入することにより、複数行の入力を 3 番目の引数で使用することもできます。

より一般的には、何かを翻訳したい場合は、それをノートに書き、File-> Download as...->をクリックPython (.py)して、出てきたスクリプトを調べます。

于 2013-09-28T14:44:41.940 に答える