source: sap-budget/parser.py @ 45a52c6

client
Last change on this file since 45a52c6 was 4cc9c2c, checked in by Alex Dehnert <adehnert@…>, 14 years ago

Add parser for SAPGUI summary reports

  • Property mode set to 100644
File size: 1.8 KB
Line 
1#!/usr/bin/python
2
3import collections
4import csv
5import re
6import sys
7
8columns = ['blank1', 'account', 'budget', 'current', 'ytd', 'cumulative', 'unexpended', 'commitment', 'uncommitted', 'blank2', 'blank3', ]
9output_cols = ['category', 'account', 'amount', ]
10
11re_account = re.compile(r"       ?(?P<num>\d+) - (?P<name>.*)")
12
13def 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
42if __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)
Note: See TracBrowser for help on using the repository browser.