Files
troupe-standup/wizard-work/ledger/census.py
T

59 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
"""ext-census: extension census of the Troupe standup repo.
Reads the curated file census `repo_files.tsv` (3,344 data rows) in the
troupe repo, applies a stated rule, and emits an ordered table of
extension -> file_count.
Rule
----
basename = final path component.
. dotfile (leading dot, e.g. .gitignore) -> "(none)"
. no dot in basename -> "(none)"
. otherwise -> substring after LAST dot, lowercased
"""
import collections
import os
import sys
SRC = "/root/troupe-standup/repo_files.tsv"
OUT = "/root/.hermes/wizard-outputs/ledger/ext-census.tsv"
def ext_of(basename):
if basename.startswith(".") or "." not in basename:
return "(none)"
return basename.rsplit(".", 1)[1].lower()
def parse_census(path):
rows = []
with open(path) as fh:
for line in fh:
line = line.rstrip("
")
if not line.strip():
continue
if line.startswith("rank path"):
continue
key, _, val = line.partition(" ")
rows.append((key.strip(), val.strip()))
return rows
def main():
rows = parse_census(SRC)
cnt = collections.Counter(ext_of(os.path.basename(p)) for _, p in rows)
total = sum(cnt.values())
if total != len(rows):
sys.stderr.write("WARNING: parsed rows=%d counts=%d
" % (len(rows), total))
with open(OUT, "w") as fh:
fh.write("rank extension file_count
")
for i, (ext, n) in enumerate(cnt.most_common(), 1):
fh.write("%d %s %d
" % (i, ext, n))
print("rows=%d total=%d -> %s" % (len(rows), total, OUT))
if __name__ == "__main__":
main()