mirror of
				https://github.com/python/cpython.git
				synced 2025-10-29 12:44:56 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #! /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()
 | 
