| #! /usr/bin/env python3 |
| |
| "Replace tabs with spaces in argument files. Print names of changed files." |
| |
| import os |
| import sys |
| import getopt |
| import tokenize |
| |
| 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: |
| with tokenize.open(filename) as f: |
| text = f.read() |
| encoding = f.encoding |
| 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 OSError: |
| pass |
| try: |
| os.rename(filename, backup) |
| except OSError: |
| pass |
| with open(filename, "w", encoding=encoding) as f: |
| f.write(newtext) |
| if verbose: |
| print(filename) |
| |
| |
| if __name__ == '__main__': |
| main() |