web-dev-qa-db-ja.com

端末プロンプトなしでIPythonセッションからコピーする方法

多くの場合、私のワークフローには、IPython Shellでのデータのクリーニング/変更が含まれます。これは、すべての素晴らしい 端末インターフェイスへのアップグレード を備えたIPythonバージョン5.0以降、特に素晴らしいものになりました。したがって、非構造化データの一部を整理しようとするとしましょう。

In [11]: for i, (num, header, txt) in enumerate(data):
    ...:     header = [e.strip() for e in header.strip().split('\n')]
    ...:     header[4] = header[4].strip(',').split(',')
    ...:     data[i] = (num, header, txt)
    ...:

素晴らしい、うまくいく!しかし、今、私は本当にこれをエディターのスクリプトに追加したいと思います。端末からコピーして貼り付けると、左側のすべてのジャンクをキャプチャします。エディタでこれを多少簡単にクリーンアップできますが、マウスに触れたり余分なものをつかんだりすることなく、コードをターミナルからクリップボードに直接コピーできると便利です。 IPythonにそのような機能はありますか?

60

%historyマジックを使用して、セッションから興味深い部分を抽出できます。ジャンクなしで端末に表示されます。

In [1]: import numpy as np    
In [2]: a = np.random(10)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-83ce219ad17b> in <module>()
----> 1 a = np.random(10)

TypeError: 'module' object is not callable

In [3]: a = np.random.random(10)
In [4]: for i in a:
   ...:     print(i)
   ...:     
0.688626523886
[...]
0.341394850998

上記のセッションの一部を保存する場合は、次を使用できます。

In [5]: %history 1 3-4

import numpy as np
a = np.random.random(10)
for i in a:
    print(i)

上記の例では、%history 1 3-4を使用して、保持するすべてのコマンドをアセンブルし、不要なコマンド(行2、エラーのあるコマンド)を省略しました。これで、適切にコピーできるセッションのバージョンができました。

ファイルを書く

-f FILENAMEをパラメーターとして使用して、これをファイルに直接書き込むこともできます。

In [8]: %history 1 3-4 -f /tmp/foo.py

ただし、これは既存のファイルを上書きします。詳細は %history magicのドキュメント にあります。

71
m00am

だから、私は最終的に私が望んでいたものとまったく同じ素晴らしいソリューションを見つけました:IPythonでViモードを使用してください。バージョン5では、以下が必要です。

$ ipython --TerminalInteractiveShell.editing_mode=vi

これで、便利なviのような視覚モードを使用して、必要なものを何でもヤンクできます!

これにより、私の.bash_profile/.bash_rcに次の新しいエイリアスが作成されます。

alias vpython='ipython --TerminalInteractiveShell.editing_mode=vi'
13

saveマジックコマンド[ documentation ]は、必要な入力行をファイルに保存します。 -aオプションは「追加」モード用で、ファイルを上書きする代わりにファイルの最後に行が追加されます。いつも使っています。

あなたの例では:

%save -a myfile.py 11
# the '%' is not necessary
save -a myfile.py 11

その後、IPythonでコーディングを続けることができます。

同じファイルに書き込みたい別のコマンドがある場合は、単にsaveと入力してから、上矢印を使用して「保存」の最後の使用を取り戻すことができます(したがって、-aオプションとファイル名は既に存在します)、行番号を編集します。

保存する複数の行と行範囲を指定できることに注意してください。

save -a myfile.py 15 18 19-25
10

シェルでは、最初にIPythonファイルを通常のPythonファイル(.py)に変換してから、クリーンアップを実行できます。

http://ipython.org/ipython-doc/3/notebook/nbconvert.html (--toスクリプト形式を参照)

ノートブックエディタでPythonファイルとしてファイルをダウンロードし、この手順の後にクリーンアップを実行することもできます。

4

ターミナルアプリケーションがコピー/貼り付けバッファーに実際にアクセスするとは思わない。マウスを使用する必要があります。実行方法は、使用している端末によって異なります。最近のほとんどの端末には、ある種の「長方形選択」または「ブロック選択」モードがあります。

Windowsでは、長方形の選択がcmd.exeおよびPowershellのデフォルトです。 Cygwinのminttyを使用している場合は、 Alt 次に、マウスで領域を選択します。同じことがPuTTYにも当てはまります。

Linux(私は目の前にありません-これらを一粒の塩で取ります)では、xtermはそれをサポートしていません。GnomeTerminalは Ctrl 修飾子として、KDEのKonsoleは Ctrl+Alt

OS Xターミナルの場合、インターネットは使用することを教えてくれます  クリックしながら。

他の端末(およびGNU Screen)にはおそらく機能があります。それをアクティブにする方法を理解するだけです。

1