import csv from lxml import etree import requests, io, zipfile, shutil from common import root import os user = 'GuillaumeHorel' password = 'password' for report in ['REDEntity', 'REDObligation', 'REDEntityDelta', 'REDObligationDelta', 'REDObligationPreferred', 'CredIndexAnnex', 'CredIndexAnnexSplit', 'REDIndexCodes']: payload = {'user': user, 'password': password, 'report':report, 'version':9} if report in ['CredIndexAnnex', 'CredIndexAnnexSplit']: payload['family']='CDX' r = requests.get('https://www.markit.com/export.jsp', params=payload) with zipfile.ZipFile(io.BytesIO(r.content)) as z: for f in z.namelist(): if "xml" in f: z.extract(f, path=os.path.join(root, "Tranche_data", "RED_reports")) fh = open("../../data/V9 Red Indices1403548976628.xml") e = etree.parse(fh) root = e.getroot() for c in root.findall('index'): with open( c.find('indexname').text + ".csv", "w") as fh2: headers = ['referenceentity', 'redentitycode', 'role', 'redpaircode', 'jurisdiction', 'tier','pairiscurrent', 'pairvalidto', 'pairvalidfrom', 'ticker', 'ispreferred', 'isdatransactiontype', 'docclause','recorddate','publiccomments','weight'] csvwriter = csv.DictWriter(fh2, fieldnames=headers) csvwriter.writeheader() data = [] for constituent in c.findall('.//originalconstituent'): data.append({l.tag: l.text for l in constituent}) data = sorted(data, key=lambda x: x['referenceentity']) csvwriter.writerows(data)