|
""" |
|
Split account-based CSV list by bank ID |
|
""" |
|
|
|
import os |
|
import sys |
|
import csv |
|
from collections import defaultdict |
|
|
|
|
|
if __name__ == "__main__": |
|
argv = sys.argv |
|
if len(argv) < 3: |
|
print("Usage: python3 %s [InputCSV] [AccountCSV]" % argv[0]) |
|
exit(1) |
|
|
|
input_csv = argv[1] |
|
acct_csv = argv[2] |
|
|
|
work_dir = os.path.dirname(input_csv) |
|
base_path, _ = os.path.splitext(input_csv) |
|
|
|
acct_bank = dict() |
|
bank_acct = defaultdict(set) |
|
|
|
with open(acct_csv, "r") as rf: |
|
reader = csv.reader(rf) |
|
header = next(reader) |
|
col_idx = {name: i for i, name in enumerate(header)} |
|
acct_idx = col_idx["acct_id"] |
|
bank_idx = col_idx["bank_id"] |
|
|
|
for row in reader: |
|
acct_id = row[acct_idx] |
|
bank_id = row[bank_idx] |
|
acct_bank[acct_id] = bank_id |
|
bank_acct[bank_id].add(acct_id) |
|
print("Loaded account list CSV file %s" % acct_csv) |
|
|
|
for bank_id, accts in bank_acct.items(): |
|
output_csv = base_path + "." + bank_id + ".csv" |
|
wf = open(output_csv, "w") |
|
writer = csv.writer(wf) |
|
|
|
with open(input_csv, "r") as rf: |
|
reader = csv.reader(rf) |
|
header = next(reader) |
|
writer.writerow(header) |
|
|
|
for row in reader: |
|
acct_id = row[0] |
|
if acct_id in accts: |
|
writer.writerow(row) |
|
wf.close() |
|
print("Extracted %d accounts in the bank %s from %s to %s" % (len(accts), bank_id, input_csv, output_csv)) |
|
|