1 | #!/usr/bin/python |
---|
2 | |
---|
3 | import collections |
---|
4 | import csv |
---|
5 | import re |
---|
6 | import sys |
---|
7 | |
---|
8 | columns = ['blank1', 'account', 'budget', 'current', 'ytd', 'cumulative', 'unexpended', 'commitment', 'uncommitted', 'blank2', 'blank3', ] |
---|
9 | output_cols = ['category', 'account', 'amount', ] |
---|
10 | |
---|
11 | re_account = re.compile(r" ?(?P<num>\d+) - (?P<name>.*)") |
---|
12 | |
---|
13 | def import_sap_summary(summary_fd, account_fd, output_fd): |
---|
14 | account_reader = csv.DictReader(account_fd, dialect='excel-tab') |
---|
15 | account_map = {} |
---|
16 | cat_totals = collections.defaultdict(float) |
---|
17 | for row in account_reader: |
---|
18 | account_map[row['account']] = row['category'] |
---|
19 | reader = csv.DictReader(summary_fd, dialect='excel-tab', fieldnames=columns, restkey='extras') |
---|
20 | writer = csv.writer(output_fd, ) |
---|
21 | for row in reader: |
---|
22 | account = row['account'] |
---|
23 | match = re_account.match(account) |
---|
24 | if match: |
---|
25 | account_num, account_name = match.groups() |
---|
26 | if account_name in account_map: |
---|
27 | cat_totals[account_map[account_name]] += float(row['ytd'].strip()) |
---|
28 | #writer.writerow((account_map[account_name], account, row['ytd'].strip())) |
---|
29 | #print "Good row '%s'" % (account, ) |
---|
30 | else: |
---|
31 | amount = float(row['ytd'].strip()) |
---|
32 | if amount != 0.0: |
---|
33 | print "%s\t%s\t%f" % ("Misc", account_name, amount) |
---|
34 | else: |
---|
35 | print "Ignoring row '%s'" % (account, ) |
---|
36 | if 'extras' in row: print >>sys.stderr, row |
---|
37 | if 'blank3' not in row: print >>sys.stderr, row |
---|
38 | writer.writerow(['category','amount']) |
---|
39 | for key, val in cat_totals.items(): |
---|
40 | writer.writerow((key, val)) |
---|
41 | |
---|
42 | if __name__ == '__main__': |
---|
43 | summary_fd = open(sys.argv[1], 'r') |
---|
44 | account_fd = open(sys.argv[2], 'r') |
---|
45 | output_fd = open(sys.argv[3], 'w') |
---|
46 | import_sap_summary(summary_fd, account_fd, output_fd) |
---|