【发布时间】:2020-01-01 17:08:03
【问题描述】:
以下代码采用 XML 文件并将特定元素解析为 CSV 文件。关于代码我有更简单和不同的代码,但略有不同,下面的代码是来自这里的大量帮助的结果。
from xml.etree import ElementTree as ET
from collections import defaultdict
import csv
tree = ET.parse('thexmlfile.xml')
root = tree.getroot()
with open('output.csv', 'w', newline='') as f:
writer = csv.writer(f)
start_nodes = root.findall('.//START')
headers = ['id', 'service_code', 'rational', 'qualify', 'description_num', 'description_txt', 'set_data_xin', 'set_data_xax', 'set_data_value', 'set_data_x']
writer.writerow(headers)
for sn in start_nodes:
row = defaultdict(str)
for k,v in sn.attrib.items():
row[k] = v
for rn in sn.findall('.//Rational'):
row['rational'] = rn.text
for qu in sn.findall('.//Qualify'):
row['qualify'] = qu.text
for ds in sn.findall('.//Description'):
row['description_txt'] = ds.text
row['description_num'] = ds.attrib['num']
# all other tags except set data must be parsed before this.
for st in sn.findall('.//SetData'):
for k,v in st.attrib.items():
row['set_data_'+ str(k)] = v
row_data = [row[i] for i in headers]
writer.writerow(row_data)
row = defaultdict(str)
我试图让这段代码进入一个包含许多 XML 文件的文件夹,并将它们解析为一个 CSV 文件。简单地说,不是解析一个 XML 文件,而是对多个 XML 执行此操作,然后将它们解析为一个 csv 文件。
我通常会使用 os.listdir(): 。代码看起来像这样
directory = 'C:/Users/docs/FolderwithXMLs'
for filename in os.listdir(directory):
if filename.endswith(".xml"):
#Something here
df.to_csv("./output.csv")
continue
else:
continue
到目前为止,我已经尝试了不同的方法将其实现到上面的代码中,但没有成功。考虑到这个过程也应该很快。
【问题讨论】:
-
@abhilb;努力实现上面的功能,所以它遍历多个 xml 文件
-
这里有什么问题?#
-
@abhilb,我希望您编写的代码不是只解析一个 XML 文件,而是使用许多 XML 文件来执行此操作并将它们解析为一个 CSV 文件
标签: python pandas elementtree