Image

Исправление отступов

Здравствуйте.

Есть питоновский исходник, он правился в разных редакторах (с разными настройками табуляции), в результате в некоторых местах сущая путаница с табами и пробелами в левых отступах.
В mc и в vim он отображается неправильно: строчки скачут. Тем не менее он нормально парсится питоном и работает .
Хочу заменить все пробелы на табы. Пробовал написать сам скрипт, который будет это делать, убил несколько часов, не получилось. В итоге руками правил код, сконвертил, но код работает не так, как раньше.

Не скажете, может есть какой-нибудь форматтер питоновского кода?
(под катом мой текущий скрипт)
import sys, re
f = open(sys.argv[1], 'r')
strs = f.readlines()
f.close()
stack = []
nline = 0
first_line = True
last_was_d = False
for s in strs:
    if re.search("^\s*$", s):
        print s,
    else:
        spaces = re.search("^(\s*)", s).group(1)
        ss = re.compile("^(\s*)").sub("", s)
        if not (re.search("^\s*#", s) or re.search('^\s*"""', s)):
            if spaces in stack:
                i = stack.index(spaces)
                stack = stack[:(i+1)]
            elif last_was_d or first_line:
                stack.append(spaces)
            else:
                sys.stderr.write(str((nline, ':', [s], stack, [spaces], last_was_d)))
                assert(0)

            first_line = False

            if re.search(":\s*$", s) or re.search("^[^#]*:\s*#", s) or re.search("{\s*$", s):
                last_was_d = True
            else:
                last_was_d = False

            print '\t'*(len(stack)-1) + ss,
        else:
            if spaces in stack:
                print '\t'*stack.index(spaces) + ss,
            else:
                print s,

    nline = nline + 1