|
Revision 525, 1.2 kB
(checked in by tim, 20 months ago)
|
|
Adding wwp stats script, a bit later than I had hoped
|
| Line | |
|---|
| 1 | import csv |
|---|
| 2 | import sys |
|---|
| 3 | |
|---|
| 4 | from defs import hier |
|---|
| 5 | |
|---|
| 6 | def summarize(fn, nfn): |
|---|
| 7 | f = csv.reader(file(fn, "rb")) |
|---|
| 8 | fo = open(nfn, "wb") |
|---|
| 9 | header = f.next() |
|---|
| 10 | cams = Node("Root") |
|---|
| 11 | for l in f: |
|---|
| 12 | for x in zip(header, l): |
|---|
| 13 | if x in hier: |
|---|
| 14 | #print hier[x][0] |
|---|
| 15 | cams.inc_child(*hier[x][0]) |
|---|
| 16 | cams.p() |
|---|
| 17 | |
|---|
| 18 | class Node: |
|---|
| 19 | def __init__(self, name): |
|---|
| 20 | self.name = name |
|---|
| 21 | self.children = {} |
|---|
| 22 | self.val = 1 |
|---|
| 23 | def inc_child(self, *x): |
|---|
| 24 | if not x: return # empty recursion... |
|---|
| 25 | if x[0] in self.children: |
|---|
| 26 | self.children[x[0]].val += 1 |
|---|
| 27 | else: |
|---|
| 28 | self.add_child(x[0]).inc_child(*x[1:]) |
|---|
| 29 | def add_child(self, name): |
|---|
| 30 | if name in self.children: |
|---|
| 31 | return self.children[name] |
|---|
| 32 | x = Node(name) |
|---|
| 33 | self.children[name] = x |
|---|
| 34 | return x |
|---|
| 35 | def count(self): |
|---|
| 36 | # Yes I know this is recursive. |
|---|
| 37 | return sum([v.count() for k,v in self.children.items()]) + self.val |
|---|
| 38 | def p(self, level=0): |
|---|
| 39 | print "%s %s %d" % (" "*level, self.name, self.count()) |
|---|
| 40 | print "%s %r" % (" "*level, self.children) |
|---|
| 41 | for k,v in self.children.items(): |
|---|
| 42 | v.p(level+2) |
|---|
| 43 | |
|---|
| 44 | if __name__ == "__main__": |
|---|
| 45 | summarize(*sys.argv[1:]) |
|---|