Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
allendowney
GitHub Repository: allendowney/cpython
Path: blob/main/Tools/patchcheck/untabify.py
12 views
1
#! /usr/bin/env python3
2
3
"Replace tabs with spaces in argument files. Print names of changed files."
4
5
import os
6
import sys
7
import getopt
8
import tokenize
9
10
def main():
11
tabsize = 8
12
try:
13
opts, args = getopt.getopt(sys.argv[1:], "t:")
14
if not args:
15
raise getopt.error("At least one file argument required")
16
except getopt.error as msg:
17
print(msg)
18
print("usage:", sys.argv[0], "[-t tabwidth] file ...")
19
return
20
for optname, optvalue in opts:
21
if optname == '-t':
22
tabsize = int(optvalue)
23
24
for filename in args:
25
process(filename, tabsize)
26
27
28
def process(filename, tabsize, verbose=True):
29
try:
30
with tokenize.open(filename) as f:
31
text = f.read()
32
encoding = f.encoding
33
except IOError as msg:
34
print("%r: I/O error: %s" % (filename, msg))
35
return
36
newtext = text.expandtabs(tabsize)
37
if newtext == text:
38
return
39
backup = filename + "~"
40
try:
41
os.unlink(backup)
42
except OSError:
43
pass
44
try:
45
os.rename(filename, backup)
46
except OSError:
47
pass
48
with open(filename, "w", encoding=encoding) as f:
49
f.write(newtext)
50
if verbose:
51
print(filename)
52
53
54
if __name__ == '__main__':
55
main()
56
57