[4cc9c2c] | 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) |
---|