使用Python将XML元素及子元素属性转换为CSV格式
没问题!我来帮你把这段XML数据转换成以时间列为开头的CSV格式,操作起来很简单,咱们一步步来:
步骤1:明确转换后的CSV格式
我们把每个时间点的所有插槽数据整合到一行,表头顺序优先以时间戳开头,后续依次对应各插槽的计数和错误数:
- Timestamp(时间戳)
- Slot1_Count、Slot1_Error(插槽1的计数和错误数)
- Slot2_Count、Slot2_Error(插槽2的计数和错误数)
- Slot3_Count、Slot3_Error(插槽3的计数和错误数)
步骤2:用Python脚本实现转换
下面是一段可以直接运行的Python代码,它会自动解析XML并生成符合要求的CSV文件:
import xml.etree.ElementTree as ET import csv # 你的XML数据 xml_data = '''<Slot_Data Timestamp="08-18-2017 07:03:20.890"> <Slot Id="1" Count="23" Error="4" /> <Slot Id="2" Count="31" Error="0" /> <Slot Id="3" Count="27" Error="2" /> </Slot_Data> <Slot_Data Timestamp="08-18-2017 07:55:54.574"> <Slot Id="1" Count="21" Error="0" /> <Slot Id="2" Count="23" Error="3" /> <Slot Id="3" Count="34" Error="1" /> </Slot_Data>''' # 给XML添加根节点以便正常解析 xml_root = ET.fromstring(f'<root>{xml_data}</root>') # 定义CSV表头 csv_headers = [ 'Timestamp', 'Slot1_Count', 'Slot1_Error', 'Slot2_Count', 'Slot2_Error', 'Slot3_Count', 'Slot3_Error' ] # 整理需要写入CSV的数据行 rows = [] for slot_data in xml_root.findall('Slot_Data'): timestamp = slot_data.get('Timestamp') row_dict = {'Timestamp': timestamp} # 提取每个插槽的计数和错误数 for slot in slot_data.findall('Slot'): slot_id = slot.get('Id') row_dict[f'Slot{slot_id}_Count'] = slot.get('Count') row_dict[f'Slot{slot_id}_Error'] = slot.get('Error') # 按表头顺序整理成列表格式 rows.append([row_dict[header] for header in csv_headers]) # 写入CSV文件 with open('slot_data.csv', 'w', newline='') as csv_file: writer = csv.writer(csv_file) writer.writerow(csv_headers) writer.writerows(rows) print("CSV文件已成功生成!")
步骤3:最终生成的CSV内容
运行上述代码后,你会得到一个名为slot_data.csv的文件,内容如下:
Timestamp,Slot1_Count,Slot1_Error,Slot2_Count,Slot2_Error,Slot3_Count,Slot3_Error 08-18-2017 07:03:20.890,23,4,31,0,27,2 08-18-2017 07:55:54.574,21,0,23,3,34,1
这样的格式完全符合你“以时间相关列开头”的要求,后续不管是用Excel打开查看还是做数据分析都很方便~
内容的提问来源于stack exchange,提问作者natnay
相关产品推荐
相关产品推荐

