【发布时间】:2021-10-07 01:49:13
【问题描述】:
您好,我正在学习 Python 编程,我正在尝试解析 100 个 XML 文件,仅提取所需的标签及其值并将它们存储为 csv 或 excel 等可读格式。 我正在使用 ElementTree 但它也解析子子节点。并使用 DataFrame 将解析后的数据存储在 csv 中,但只存储最后一个值。有人可以帮忙解析和存储值吗?
我试图在代码中修复三件事:
- 发送 100 个 XML 文件的链接作为解析的输入,或访问存储了 100 个 XML 文件链接的 csv 文件并将它们用作输入(而不是像下面的代码中一样使用本地 XML 文件)
- 不要解析具有相同标签名称的子/子节点(即只解析标签的“标签”、“状态”,而不是下面 XML 文件中的标签)
- 将所有 xml 文件中的解析值以表格式存储或发送到一个(或多个)csv 或 excel 文件,其中标签名称为列,其值为行。
import pandas as pd
import numpy as np
import xml.etree.cElementTree as et
tree=et.parse(r'C:\Users\admin\Downloads\test.xml')
root=tree.getroot()
Label = []
Status = []
StartTime = []
count=0
if count==0:
for lbl in root.iter('label'):
print(lbl.text)
Label.append(lbl.text)
count=count+1
count1=0
if count1==0:
for sts in root.iter('status'):
print(sts.text)
Status.append(sts.text)
count1=count1+1
count2=0
if count2==0:
for st in root.iter('startTime'):
print(st.text)
StartTime.append(st.text)
count2=count2+1
Jobs_df = pd.DataFrame(list(zip(Label,Status,StartTime,EndTime,Audio)),
columns=['Label','Status','StartTime','EndTime','Audio'])
Jobs_df.to_csv("pyXML.csv")
我的 XML 文件:
<session>
<meta>
<xmlURL>https://s3.amazonaws.com/test.xml</xmlURL>
</meta>
<server/>
<result>
<audio>
<startTime>0</startTime>
<endTime>5880</endTime>
</audio>
<words>
<word>
<label>a</label>
<status>BAD</status>
<score>0.0</score>
<startTime>990</startTime>
<children/>
<phonemes>
<phoneme>
<label>AH</label>
<status>BAD</status>
<evaluation>SUBSTITUTION</evaluation>
</phoneme>
</phonemes>
</word>
</words>
</result>
</session>
.
.
.
and so on..
要求以 csv 或 excel 格式输出:
| label | status | startTime |
|---|---|---|
| a | Bad | 990 |
有人可以帮忙完成这个任务吗!
【问题讨论】:
标签: python pandas xml-parsing elementtree