インデントを整形するプログラム
今使用しているテキストエディタでタブをスペースに変換する方法が分からなかったのでインデントを整形するプログラムを作成した。
使用方法は、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]))