|  | #! /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, 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, 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 | 
|  | with open(filename, "w") as f: | 
|  | f.write(newtext) | 
|  | if verbose: | 
|  | print filename | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | main() |