行番号付加+expand (Pythonのツール)

ソースコードとかで、行頭に行番頭を付加するのとタブを半角空白に置換するのが必要になったので作った。
いや、Cygwinでcat -n | expand するだけの話なんだけど、普段cmd.exeで生きている人なので。

import os
import sys

def calc_pad_len(column, ts):
    '''
    >>> calc_pad_len(0, 4)
    4
    >>> calc_pad_len(2, 4)
    2
    >>> calc_pad_len(3, 4)
    1
    >>> calc_pad_len(4, 4)
    4
    >>> calc_pad_len(10, 8)
    6
    '''
    return ts - column%ts

def expand_and_lineno(infile, outfile, ts):
    lineno = 0
    for line in infile:
        lineno += 1
        outfile.write('%4d '%(lineno))
        column = 0
        for c in line:
            if c == '\t':
                pad_len = calc_pad_len(column, ts)
                outfile.write(' '*pad_len)
                column += pad_len
            else:
                outfile.write(c)
                column += 1

if __name__ == '__main__':
    if '-t' in sys.argv:
        ts = int(sys.argv[sys.argv.index('-t') + 1])
    else:
        ts = 4
    expand_and_lineno(sys.stdin, sys.stdout, ts)

かかった時間:20分

こういう素振り(と言ったら大袈裟だけど)もしておかないとね。