| """ |
| 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)) |
|
|