8.24.2013

Python: Increasing All Numbers in Text File

Python: テキスト中の数字を全てインクリメントする

目的

Vim における Ctrl-A (Increasing or decreasing numbers - Vim Tips Wiki) のように
テキスト中の数字を全てインクリメントする処理を Python で行いたい。

コード

textprocessor を利用する。

正規表現モジュールの split 関数を利用して1行分の文字列を「数字部分」と「数字以外」に切り分けて、
数字部分のみを +1 することでシンプルに書けた。 

今回は「0」で始まる2文字以上の数字(00, 01 など)は特別にインクリメント対象から除外している。

また、マイナス記号は単なる「数字以外の文字」として扱われるため、負数のインクリメントには対応していない。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
import textprocessor

tokenizer = re.compile(r'(\d+)').split


def convert(token):
    if token != '0' and token.startswith('0'):
        return token
    return str(int(token) + 1)


def increment(line):
    tokens = tokenizer(line)
    tokens = [x if i % 2 == 0 else convert(x) for (i, x) in enumerate(tokens)]
    print(''.join(tokens))


if __name__ == '__main__':
    textprocessor.process(increment)

実行例

  • 準備したファイル
    a
    1
    b2
    3c
    d4e
    5f6
    7 8 9
    w0rd
    -5 -4 -3 -2 -1 0 1 2 3 4 5
    [0, 00, 01, 02, 03, 04, 05]
    0.0 1.1 2.2 3.3 4.4 5.5
    9.99 999.9999 99999.999999
    
  • 実行結果
    $ ./increment.py ./test.txt
    a
    2
    b3
    4c
    d5e
    6f7
    8 9 10
    w1rd
    -6 -5 -4 -3 -2 1 2 3 4 5 6
    [1, 00, 01, 02, 03, 04, 05]
    1.1 2.2 3.3 4.4 5.5 6.6
    10.100 1000.10000 100000.1000000
    
GitHub

 

Related Posts

0 件のコメント:

コメントを投稿