In [1]:
import csv
from pathlib import Path
import os
import json

In [2]:
home = os.environ['HOME']

In [3]:
f = Path('{HOME}/Downloads/common-only.csv'.format(HOME=home))

In [6]:
def quoted(val):
    isnum = True
    try:
        float(val)
    except ValueError:
        isnum = False
    if val in {'TRUE', 'FALSE'}:
        return val[0] + val[1:].lower()
    elif val.startswith('{'):
        return json.loads(val)
    elif (not isnum):
        return '"{}"'.format(val)
    else:
        return val

In [7]:
with open(f, 'r', newline='') as plainrdr:                    
    rdr = csv.reader(plainrdr, delimiter=',', quotechar='"')
    head = next(rdr)
    keys = head
    print(keys)
    excludes = {'id', 'corporation_pk', 'valuation_id', 'backsolve_id','created', 'created_by_id', 'is_void', 'modified', 'captable_id'}
    global data
    data=[]
    for line in rdr:
        la = line
        d = {key: quoted(val) for key, val in zip(keys, la) if key not in excludes and val != 'NULL'}
        
        data.append('CaptableData(\n' + '\n'.join('    {}={},'.format(k,v) for k,v in d.items()) + '\n),')


['id', 'key', 'share_class_key', 'name', 'corporation_pk', 'security_type', 'outstanding_quantity', 'quantity_held_by_org', 'seniority', 'principal', 'exercise_price', 'original_issue_price', 'conversion_ratio', 'multiplier', 'participating_preferred', 'preference_cap', 'dividend_type', 'interest_rate', 'interest_accrual', 'interest_compounding', 'day_count_convention', 'interest_calculation_data', 'valuation_cap', 'note_type', 'earliest_issue_date', 'latest_issue_date', 'backsolve_id', 'valuation_id', 'created', 'created_by_id', 'is_void', 'modified', 'available_quantity', 'option_plan_key', 'discount_percent', 'captable_id']

In [8]:
with open('{HOME}/tmp/data_sample.txt'.format(HOME=home), 'w') as out:
    out.write('\n'.join(data))

In [ ]:
data