detab v2.0

来源:互联网 发布:银行数据采集器 编辑:程序博客网 时间:2024/06/05 08:59
#-------------------------------------------------------------------------------# Name:        detab.py# Purpose:     replace the tab character by several whitespace characters#              in C/C++ source/head files.# Author:      mayadong7349# Created:     04/21/2012# Copyright:   (c) mayadong7349 2012# Licence:     GPL#-------------------------------------------------------------------------------#! /usr/bin/env python3# -*- coding: utf-8 -*-# Filename: detab.pyfrom os  import renamefrom os  import strerrorfrom sys import stdinfrom sys import stderrfrom sys import argvgetln  = stdin.readlineerrmsg = stderr.writedef main():    print(r"""This program exchanges '\t' with several whitespace characters in your code files.Usage: detab.py <file list>""")    if len(argv) < 2:        errmsg('No actions specified.')    else:        print('''How many whitespace characters you want(4 or 8 is especially recommanded) ?Caution: If an invalid number is given, 4 will be taken by default.        ''')        try:            num = int(getln())        except ValueError:            num = 4        for oldfile in argv[1:]:            newfile = oldfile            # errno = 0            try:                # rename the old file by adding a '.old' extension.                rename(oldfile, oldfile + '.old')            except OSError as err_type: # in Win32, you can also use WindowsError instead.                errmsg(str(err_type) + oldfile + '\n')                continue            oldfile += '.old'            # open file for reading            try:                fin = open(oldfile)            except IOError as err_type:                errmsg(str(err_type) + oldfile + '\n')                continue            # open file for writing            try:                fout = open(newfile, 'w')            except IOError as err_type:                errmsg(str(err_type) + newfile + '\n')                continue            # exchange '\t' with several whitespace characters in old file, and write into a new file            lines = (eachline.expandtabs(num) for eachline in fin)            for eachLine in fin:                fout.write(eachLine.expandtabs(num))            # close all files opened            fout.close()            fin.close()            print('Success: %s --> %s' % (oldfile, newfile))if __name__ == '__main__':    main()