I am parsing all my data from xml and am trying to feed it to a CSV. Only problem is all of it isn't populating CSV and I am unsure why. My data prints okay and its all there so I am unsure why won't it write to my csv.. Any help would be appreciated. My 'Energy' data is ~65,000 values but only 2 are populating my csv. Please see my python code attached.
import xml.etree.ElementTree as ET
mytree = ET.parse('PupilMeasurement110.xml')
myroot = mytree.getroot()
import csv
import numpy as np
from matplotlib import cm
for data in myroot.findall('Results/Average2dData/elt'):
inte = data.find('Energy').text
# write data to csv
with open('mycsv3.csv', 'w', newline='') as f:
thewriter = csv.writer(f)
thewriter.writerow(['X', 'Y', 'Intensity'])
for row in data:
thewriter.writerow([inte])
Part of the data portion of my XML that I am parsing looks like this:
<Results>
<Average2dData>
<elt>
<Sigma>
<X>-1.1000000</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0913725</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0827451</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0741176</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0654902</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0568627</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0482353</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0396078</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0309804</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0223529</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0137255</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
<elt>
<Sigma>
<X>-1.0050980</X>
<Y>-1.1000000</Y>
</Sigma>
<Energy>0.0000000</Energy>
</elt>
</Average2dData>
</Results>
If you don't write a new CSV file for every <elt>
you encounter...
pupil_measurement = ET.parse('PupilMeasurement110.xml')
results = pupil_measurement.getroot() # .getroot() will return the <Results> element
with open('mycsv3.csv', 'w', newline='') as f:
thewriter = csv.writer(f)
thewriter.writerow(['X', 'Y', 'Intensity'])
for elt in results.findall('Average2dData/elt'):
x = elt.find('Sigma/X').text
y = elt.find('Sigma/Y').text
inte = elt.find('Energy').text
thewriter.writerow([x, y, inte])