1. ホーム
  2. python

IPythonセッションからターミナルのプロンプトを出さずにコピーする方法

2023-07-21 14:06:12

質問

頻繁に、私のワークフローは、IPythonシェルでデータクリーニング/マンギングを伴います。これは、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にそのような機能があるのでしょうか?

どのように解決するのですか?

を使用することができます。 %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 マジック .