Python解析XML提取DECEASED标签属性并导出为CSV的问题求助
问题原因与解决方案
你的代码出现空数据集主要有三个核心问题:
- 节点路径错误:DECEASED标签嵌套在
BSB -> APPLSUMMARY层级下,直接访问root.BSB.DECEASED无法定位到目标节点 - 取值逻辑错误:DECEASED为自闭合标签,所有属性值存储在节点的
attrib字段中,并非子节点,遍历getchildren()无法获取到数据 - 依赖导入不全:代码使用的
lxml.objectify、pandas都没有提前导入
可直接运行的实现代码
方案1:兼容你原有的lxml.objectify写法
首先安装依赖:pip install lxml pandas
代码如下:
from lxml import objectify import pandas as pd # 替换为你的XML文件实际路径 xml_path = "test.xml" parsed = objectify.parse(open(xml_path, encoding="utf-8")) root = parsed.getroot() data = [] # 直接定位DECEASED节点,读取属性字典 deceased_node = root.APPLSUMMARY.DECEASED data.append(deceased_node.attrib) # 导出CSV,utf-8-sig编码避免Excel打开乱码 df = pd.DataFrame(data).drop_duplicates() print(df) df.to_csv("DECEASED.csv", index=False, encoding="utf-8-sig")
方案2:使用Python标准库实现(无需额外安装lxml)
仅依赖Python自带的xml模块,无需安装lxml:
import xml.etree.ElementTree as ET import pandas as pd xml_path = "test.xml" tree = ET.parse(xml_path) # 支持匹配任意层级的DECEASED标签,即使后续XML结构调整也能生效 deceased_nodes = tree.findall(".//DECEASED") data = [node.attrib for node in deceased_nodes] df = pd.DataFrame(data).drop_duplicates() df.to_csv("DECEASED.csv", index=False, encoding="utf-8-sig") print(df)
导出的CSV会自动将LQB、FCC、GCC、HCC、ICC作为列名,对应属性值作为行内容,符合你预期的对齐效果。
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

