I have test data that looks like this:
[['81303~E8889~81300~7295~71942', 'AR', '61.43463381', '0', '0', '0', '0', '0', '0', '0', '99212~73080~00378415101~00406035705~63304045830~99202~WC101~29105~A4565~73070~73090~99203'], ['7234', 'AR', '54.29158111', '0', '0', '0', '1', '0', '0', '0', 'E0849']]
and I'm trying to get this into XML format for a soap API call, but the issue I'm running into is the tilde
Here is what my test csv file looks like:
playcodes,Benefit State,Age at
DOL,BEHAVIORAL,CARDIAC,DIABETES,HYPERTENSION,OBESE,SMOKER,SUBSTANCE,CPT_codes
81303~E8889~81300~7295~71942,AR,61.43463381,0,0,0,0,0,0,0,99212~73080~00378415101~00406035705~63304045830~99202~WC101~29105~A4565~73070~73090~99203
7234,AR,54.29158111,0,0,0,1,0,0,0,E0849
My code is this:
import csv
import xml.etree.ElementTree as ET
import xml
f = open('medical_test.csv')
next(f)
csv_f = csv.reader(f)
data = []
for row in csv_f:
data.append(row)
f.close()
print(data)
[['81303~E8889~81300~7295~71942', 'AR', '61.43463381', '0', '0', '0', '0', '0', '0', '0', '99212~73080~00378415101~00406035705~63304045830~99202~WC101~29105~A4565~73070~73090~99203'], ['7234', 'AR', '54.29158111', '0', '0', '0', '1', '0', '0', '0', 'E0849']]
def convert_row(row):
return """
<?xml version="1.0" encoding="UTF-8"?>
<cbcalc>
<icdcodes>
%s
</icdcodes>
<state>%s</state>
<country>US</country>
<clientid>Custom field</clientid>
<medicalonly></medicalonly>
<bpcode></bpcode>
<noicode></noicode>
<age>%s</age>
<jobclass>1</jobclass>
<fulloutput>Y</fulloutput>
<cfactors>
<depression>%s</depression>
<cardiac>%s</cardiac>
<diabetes>%s</diabetes>
<hypertension>%s</hypertension>
<legalrep></legalrep>
<obesity>%s</obesity>
<smoker>%s</smoker>
<subabuse>%s</subabuse>
</cfactors>
<prosummary>
<icd>
<code></code>
</icd>
<ndc>
<code></code>
<ndc>
<cpt>
<code>%s</code>
</cpt>
<hcpcs>
<code></code>
</hcpcs>
</prosummary>
</cbcalc>
""" % (row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])
print('\n'.join([convert_row(row) for row in data[1:]]))
Output looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<cbcalc>
<icdcodes>
<code>7234</code>
</icdcodes>
<state>AR</state>
<country>US</country>
<clientid>Custom field</clientid>
<medicalonly></medicalonly>
<bpcode></bpcode>
<noicode></noicode>
<age>54.29158111</age>
<jobclass>1</jobclass>
<fulloutput>Y</fulloutput>
<cfactors>
<depression>0</depression>
<cardiac>0</cardiac>
<diabetes>0</diabetes>
<hypertension>1</hypertension>
<legalrep></legalrep>
<obesity>0</obesity>
<smoker>0</smoker>
<subabuse>0</subabuse>
</cfactors>
<prosummary>
<icd>
<code></code>
</icd>
<ndc>
<code></code>
<ndc>
<cpt>
<code>E0849</code>
</cpt>
<hcpcs>
<code></code>
</hcpcs>
</prosummary>
</cbcalc>
I need this:
<?xml version="1.0" encoding="UTF-8"?>
<cbcalc>
<icdcodes>
<code>81303</code>
<code>E8889</code>
<code>81300</code>
<code>7295</code>
<code>71942</code>
</icdcodes>
<state>AR</state>
<country>US</country>
<age>61.43463381</age>
<jobclass>1</jobclass>
<fulloutput>Y</fulloutput>
<cfactors>
<depression>0</depression>
<cardiac>0</cardiac>
<diabetes>0</diabetes>
<hypertension>0</hypertension>
<obesity>0</obesity>
<smoker>0</smoker>
<subabuse>0</subabuse>
</cfactors>
<prosummary>
<icd>
</icd>
<ndc>
</ndc>
<cpt>
<code>99212</code>
<code>73080</code>
<code>00378415101</code>
<code>00406035705</code>
<code>63304045830</code>
<code>99202</code>
<code>WC101</code>
<code>29105</code>
<code>A4565</code>
<code>73070</code>
<code>73090</code>
<code>99203</code>
</cpt>
<hcpcs>
</hcpcs>
</prosummary>
<icdcodes>
<code>7234</code>
</icdcodes>
<state>AR</state>
<country>US</country>
<age>54.29158111</age>
<jobclass>1</jobclass>
<fulloutput>Y</fulloutput>
<cfactors>
<depression>0</depression>
<cardiac>0</cardiac>
<diabetes>0</diabetes>
<hypertension>1</hypertension>
<obesity>0</obesity>
<smoker>0</smoker>
<subabuse>0</subabuse>
</cfactors>
<prosummary>
<icd>
</icd>
<ndc>
</ndc>
<cpt>
<code>E0849</code>
</cpt>
<hcpcs>
</hcpcs>
</prosummary>
</cbcalc>
I tried this but it didn't work.
codes = '\n'.join([f' <code>{item}</code>'
for item in row[0].split('~')])
I'm losing data because I have the tildes in the list. How do I extract the data that has a tilde so that I get all my data in XML format?