Mercurial > cpython-lru_cache-weakref
annotate Tools/scripts/byext.py @ 27998:e27f58a50737 legacy-trunk
SF bug #690377: Dud footnote reference in distutils docs
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Fri, 21 Feb 2003 02:47:09 +0000 |
| parents | 8ed472e5bcd4 |
| children | ba2d8921a8da |
| rev | line source |
|---|---|
|
26999
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 #! /usr/bin/env python |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 """Show file statistics by extension.""" |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 import os |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 import sys |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 class Stats: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 def __init__(self): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 self.stats = {} |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 def statargs(self, args): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 for arg in args: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 if os.path.isdir(arg): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 self.statdir(arg) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 elif os.path.isfile(arg): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 self.statfile(arg) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 else: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 sys.stderr.write("Can't find %s\n" % file) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 self.addstats("<???>", "unknown", 1) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 def statdir(self, dir): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 self.addstats("<dir>", "dirs", 1) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 try: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 names = os.listdir(dir) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 except os.error, err: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 sys.stderr.write("Can't list %s: %s\n" % (file, err)) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 self.addstats(ext, "unlistable", 1) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 return |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 names.sort() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 for name in names: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 full = os.path.join(dir, name) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 if os.path.islink(full): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 self.addstats("<lnk>", "links", 1) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 elif os.path.isdir(full): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 self.statdir(full) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 else: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 self.statfile(full) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 def statfile(self, file): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 head, ext = os.path.splitext(file) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 head, base = os.path.split(file) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 if ext == base: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 ext = "" # .cvsignore is deemed not to have an extension |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 self.addstats(ext, "files", 1) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 try: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 f = open(file, "rb") |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 except IOError, err: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 sys.stderr.write("Can't open %s: %s\n" % (file, err)) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 self.addstats(ext, "unopenable", 1) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 return |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 data = f.read() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 f.close() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 self.addstats(ext, "bytes", len(data)) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 if '\0' in data: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 self.addstats(ext, "binary", 1) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 return |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 if not data: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 self.addstats(ext, "empty", 1) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 #self.addstats(ext, "chars", len(data)) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 lines = data.splitlines() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 self.addstats(ext, "lines", len(lines)) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 del lines |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 words = data.split() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 self.addstats(ext, "words", len(words)) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 def addstats(self, ext, key, n): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 d = self.stats.setdefault(ext, {}) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 d[key] = d.get(key, 0) + n |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 def report(self): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 totals = {} |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 exts = self.stats.keys() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 exts.sort() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 # Get the column keys |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 columns = {} |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 for ext in exts: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 columns.update(self.stats[ext]) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 cols = columns.keys() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 cols.sort() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 minwidth = 7 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 extwidth = max([len(ext) for ext in exts]) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 print "%*s" % (extwidth, "ext"), |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 for col in cols: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 width = max(len(col), minwidth) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 print "%*s" % (width, col), |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 print |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 for ext in exts: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 print "%*s" % (extwidth, ext), |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 for col in cols: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 width = max(len(col), minwidth) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 value = self.stats[ext].get(col) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 if value is None: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 s = "" |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 else: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 s = "%d" % value |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 totals[col] = totals.get(col, 0) + value |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 print "%*s" % (width, s), |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 print |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 print "%*s" % (extwidth, "TOTAL"), |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 for col in cols: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 width = max(len(col), minwidth) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 print "%*s" % (width, totals[col]), |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 print |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
106 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 def main(): |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 args = sys.argv[1:] |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
109 if not args: |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 args = [os.curdir] |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
111 s = Stats() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 s.statargs(args) |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 s.report() |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 if __name__ == "__main__": |
|
8ed472e5bcd4
Silly little script to print statistics (files, lines, words) by
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 main() |
