| #! /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() |