如何编写脚本从XML提取数据并按规则保存至Excel文件
问题描述
我有如下XML文件:
<?xml version="1.0" encoding="UTF-8" ?> <Act bind="a" > <Key frame="32" value="1" /> <Key frame="62" value="8" /> <Key frame="106" value="14" /> </> <Act bind="b" > <Key frame="32" value="1" /> <Key frame="62" value="30" /> <Key frame="106" value="30" /> </> <Act bind="c" > <Key frame="28" value="81" /> <Key frame="58" value="78" /> <Key frame="102" value="78" /> </> </>
需要编写脚本将这些值保存到Excel文件,要求:
- 列数与bind值数量一致
- 行数与所有唯一frame值数量一致
- frame按升序排列
- 若某个bind对应frame无值则填充0
输出示例如下:
a b c 28 0 0 81 32 1 1 0 58 0 0 78 62 8 30 0 102 0 0 78 106 14 30 0
解决方案
可以用Python结合XML解析库和Excel操作库实现,步骤如下:
1. 安装依赖
先安装所需的第三方库:
pip install openpyxl
2. 完整脚本
import xml.etree.ElementTree as ET from openpyxl import Workbook # 解析XML文件(替换为你的XML文件路径) tree = ET.parse('input.xml') root = tree.getroot() # 存储各bind对应的frame-value映射,同时收集所有frame值 bind_data = {} all_frames = set() for act_node in root.findall('Act'): bind_name = act_node.get('bind') bind_data[bind_name] = {} for key_node in act_node.findall('Key'): frame_num = int(key_node.get('frame')) value_num = int(key_node.get('value')) bind_data[bind_name][frame_num] = value_num all_frames.add(frame_num) # 对frame值升序排序,整理bind名称列表 sorted_frames = sorted(all_frames) bind_names = list(bind_data.keys()) # 创建Excel工作簿并写入数据 wb = Workbook() ws = wb.active # 写入表头 ws.append([''] + bind_names) # 逐行写入frame和对应bind的值,无值则填0 for frame in sorted_frames: row_content = [frame] for bind in bind_names: row_content.append(bind_data[bind].get(frame, 0)) ws.append(row_content) # 保存Excel文件 wb.save('output.xlsx')
脚本说明
- 先解析XML文件,遍历每个
Act节点提取bind标识,再遍历下属Key节点收集frame和对应value,同时记录所有出现过的frame值 - 对收集到的frame值进行升序排序,确保输出行的顺序符合要求
- 创建Excel工作簿,先写入bind名称作为表头,再逐行写入frame值和各bind对应的数值,不存在的映射自动填充0
- 最后将数据保存为指定的Excel文件
内容的提问来源于stack exchange,提问作者user9805040
相关产品推荐
相关产品推荐

