【发布时间】:2020-01-27 18:15:10
【问题描述】:
下面的代码获取一个包含 xml 文件的文件夹并将它们解析为单个 csv 文件。 它确实做得很好。
from xml.etree import ElementTree as ET
from collections import defaultdict
import csv
from pathlib import Path
directory = 'C:/Users/docs/FolderwithXMLs'
with open('output.csv', 'w', newline='') as f:
writer = csv.writer(f)
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)
xml_files_list = list(map(str,Path(directory).glob('**/*.xml')))
for xml_file in xml_files_list:
tree = ET.parse(xml_file)
root = tree.getroot()
start_nodes = root.findall('.//START')
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']
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)
输出如下所示
我一直在尝试为该特定 ID 的 set_data_value 行数添加一个计数器。 输出应该是这样的
如有必要,我也可以提供 xml 数据。很抱歉,有人必须编辑问题以显示图片,而不仅仅是宣传链接
我已经检查了这里的其他帖子,但我无法在此代码中实现
【问题讨论】:
-
可能
df.groupby('id').cumcount().虽然你可能首先需要做df['id'] = df['id'].ffill() -
@ALollz,如果您能给出答案并编辑我的问题以显示图片,那么它对可能遇到相同问题的其他用户很有帮助。非常感谢
-
@ALollz 感谢您编辑问题。你能帮我解决这个问题吗?如果有必要我也可以放 xml 文件