为什么我的 XML 解析数据没有写入我的 CSV?

Why isn't my XML parsed data writing to my CSV?

我正在解析来自 xml 的所有数据,并尝试将其提供给 CSV。唯一的问题是所有这些都没有填充 CSV,我不确定为什么。我的数据打印正常,而且都在那里,所以我不确定为什么它不会写入我的 csv.. 任何帮助将不胜感激。我的 'Energy' 数据大约有 65,000 个值,但只有 2 个在填充我的 csv。请参阅我附上的 python 代码。

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

我正在解析的 XML 的部分数据如下所示:

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

如果您不为遇到的每个 <elt> 编写一个新的 CSV 文件...

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