view Tools/scripts/untabify.py @ 67467:abe201dfd3dc 3.1

Merged revisions 87861,87863 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r87861 | antoine.pitrou | 2011-01-08 11:23:29 +0100 (sam., 08 janv. 2011) | 3 lines Fix test_ssl after r87849 ........ r87863 | antoine.pitrou | 2011-01-08 11:28:11 +0100 (sam., 08 janv. 2011) | 3 lines Add EHOSTUNREACH ('No route to host') to the errnos trapped by transient_internet(). ........
author Antoine Pitrou <solipsis@pitrou.net>
date Sat, 08 Jan 2011 10:31:09 +0000
parents 05ee6f8c0260
children 3c9232a684ae
line wrap: on
line source

#! /usr/bin/env python

"Replace tabs with spaces in argument files.  Print names of changed files."

import os
import sys
import getopt

def main():
    tabsize = 8
    try:
        opts, args = getopt.getopt(sys.argv[1:], "t:")
        if not args:
            raise getopt.error("At least one file argument required")
    except getopt.error as msg:
        print(msg)
        print("usage:", sys.argv[0], "[-t tabwidth] file ...")
        return
    for optname, optvalue in opts:
        if optname == '-t':
            tabsize = int(optvalue)

    for filename in args:
        process(filename, tabsize)

def process(filename, tabsize, verbose=True):
    try:
        f = open(filename)
        text = f.read()
        f.close()
    except IOError as msg:
        print("%r: I/O error: %s" % (filename, msg))
        return
    newtext = text.expandtabs(tabsize)
    if newtext == text:
        return
    backup = filename + "~"
    try:
        os.unlink(backup)
    except os.error:
        pass
    try:
        os.rename(filename, backup)
    except os.error:
        pass
    f = open(filename, "w")
    f.write(newtext)
    f.close()
    if verbose:
        print(filename)

if __name__ == '__main__':
    main()