インデントを整形するプログラム

今使用しているテキストエディタでタブをスペースに変換する方法が分からなかったのでインデントを整形するプログラムを作成した。
使用方法は、python pyformat.py foo.py とする。デフォルトでスペース4つにインデントされる。インデントをスペース2つにしたい場合は、python pyformat.py foo.py 2 とする。

# -*- coding: utf-8 -*-
# pyformat.py
import sys

def cnt_space(s):
    '行頭のスペースもしくはタブの個数を数える'
    cnt = 0
    for c in s:
        if c == '\t' or c == ' ': cnt += 1
        else: break
    return cnt

def pyformat(fname, idt=' '*4):
    f = file(fname)
    lines = f.read().splitlines()
    new_lines = []
    indents = []
    for line in lines:
        curr_cnt = cnt_space(line)
        prev_cnt = sum(indents)
        if prev_cnt < curr_cnt:  # 1段階深いインデントが発生
            indents.append(curr_cnt - prev_cnt)
        elif curr_cnt < prev_cnt: # インデントを戻す
            indents.pop()
            while True:
                if curr_cnt < sum(indents): indents.pop()
                else: break
        new_lines.append('%s%s' % (idt * len(indents), line.strip()))
    f.close()
    return '\n'.join(new_lines)

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print >> sys.stderr, 'usage: python %s filename [num_space]' % sys.argv[0]
    elif len(sys.argv) < 3:
        print pyformat(sys.argv[1])
    else:
        print pyformat(sys.argv[1], ' ' * int(sys.argv[2]))