summaryrefslogtreecommitdiffstats
path: root/multi-dim-dict.py
blob: 6b9e08fa8795a5c80d3be7ebece8fce89fc94beb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import sys
import re

# given following csv input, sum up the log size (last field) per each exchange per day

csv_input = """date,process,host,log,bytes
20140206,cme_trader_2,cme0001,0345-cme_trader_2.log.gz,15400000
20140206,phlx_trader_1,phlx0001,0651-phlx_trader_1.log.gz,14100000
20140206,phlx_trader_2,phlx0001,0645-phlx_trader_2.log.gz,13800000
20140207,cme_trader_2,cme0001,0345-cme_trader_2.log.gz,15800000
20140207,cme_trader_3,cme0001,0345-cme_trader_3.log.gz,14200000
20140207,phlx_trader_1,phlx0001,0651-phlx_trader_1.log.gz,24100000"""

# you need to access and update the numsize of each exch
# you want levearge multi-dim dict for auto/mapping each line of csv to avoid keeping csv like structure in memory
header = ''
exchange_logs = {}
lines = csv_input.splitlines()
for line in lines:
    l = line.split(',')
    log_exch = ''
    try:
        log_exch = re.search(r"^(.*)_trader_\d$", l[1]).group(1)
    except AttributeError:
        header = line
        continue
    #print('csv line is: ', l)
    log_date = l[0]
    log_size = l[4]

    if log_date not in exchange_logs.keys():
        exchange_logs[log_date] = {}

    if log_exch in exchange_logs[log_date].keys():
        exchange_logs[log_date][log_exch] += int(log_size)  # increment already present log size
    else:
        exchange_logs[log_date][log_exch] = int(log_size)   # inital assignment

print(header)
for k, v in sorted(exchange_logs.items()):
    for k2, v2 in sorted(v.items()):
        print("{0},{1},{2}".format(k, k2, v2))