LoginSignup
1
0

More than 3 years have passed since last update.

テキスト中のIPythonコンソールのインデックスを自動で振り直す

Posted at

Qiitaの記事にIPythonコンソールの実行結果を書きたいことがありました。
その際にコピペしたテキストのInオブジェクト、Outオブジェクトのインデックスがバラバラで、手作業で振り直すのが面倒だったのでスクリプトを書きました。

以下、README.mdをそのまま抜粋します。

renumber_ipython_inout.py

テキストに含まれるIPythonコンソールIn、Outオブジェクトのインデックスの再割り当てを行うスクリプトです。

このスクリプトの使い道

IPythonコンソールの実行結果のコピペを、きれいにして共有したいときなどにお使いください。

例えば、以下のようにインデックスがバラバラなテキストが、

In [2]: index = '  ^100hoge'

In [3]: import re

In [13]: match = re.match(r'^\s*(\^)(\d*).*', index)

In [29]: match.groups()
Out[29]: ('^', '100')

スクリプト適用後には以下のようになります。

In [1]: index = '  ^100hoge'

In [2]: import re

In [3]: match = re.match(r'^\s*(\^)(\d*).*', index)

In [4]: match.groups()
Out[4]: ('^', '100')

使い方

renumber_ipython_inout.pyをダウンロードして実行してください。

引数にファイル名を与えるか、標準入力からテキストを入力すると、変換結果を標準出力します。

$ python renumber_ipython_inout.py filename

もしくは

$ cat file_name | python renumber_ipython_inout.py 

仕様

  • テキスト中にIn [.*]:もしくはOut[.*]:を見つけたら、インデックス部分の文字列を適切な数値に置換します。
  • それ以外の文字列の置換は行いません。
  • テキストの先頭から順に、1からの連番になります。
  • In [^]:と書くことで、任意の箇所で1に初期化することもできます。
  • In [^正の整数]:と書くことで、任意の箇所で任意の数値に初期化することもできます。

実行例

スクリプト適用前

In [10]:

In []:  # 空でもいい
Out[何か]:  # 何でもいい

In [^]:  # 1に初期化される

In [40]:
Out[40]:

In [  ^100hoge]: # 先頭の空白や数値以外は無視して、100に初期化される
Out[50]:

# 先頭じゃなくても適用されるので注意 In []: Out[]:

In [60]:

スクリプト適用後

In [1]:

In [2]:  # 空でもいい
Out[2]:  # 何でもいい

In [1]:  # 1に初期化される

In [2]:
Out[2]:

In [100]: # 先頭の空白や数値以外は無視して、100に初期化される
Out[100]:

# 先頭じゃなくても適用されるので注意 In [101]: Out[101]:

In [102]:
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0