python-3.x - 为什么我的 XML 解析数据没有写入我的 CSV?
问题描述
我正在从 xml 解析我的所有数据,并试图将其提供给 CSV。唯一的问题是所有这些都没有填充 CSV,我不确定为什么。我的数据打印正常,而且它都在那里,所以我不确定它为什么不写入我的 csv.. 任何帮助将不胜感激。我的“能源”数据约为 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])
推荐阅读
- json - JSON.stringify 成请求的查询字符串参数,不带正文
- python - Python 面板模板将标题从 Bokeh Application 更改为 MyApp
- ios - 如何从目标 VC 的子级为协议设置委托?
- python - PyOBJC MLMediaLibrary
- javascript - 从 api 响应中获取特定值
- android - @DocumentId 注释如何用于 Firestore 的字段?
- javascript - 当我在我的网络应用程序上转到 /admin 页面时,passport-jwt 返回未经授权
- swift - 改变反向动画速度 SwiftUI
- .net - Visual Studio 2015 缺少用于 OleDb 的 .Net 提供程序
- swift - iOS 13 - 相机挂在 VNDocumentCameraViewController 中