Python实现XML转CSV时触发Stops相关KeyError报错如何解决
报错原因
root.attrib是用来获取XML节点属性的API,仅能读取写在节点标签内部的属性名="属性值"格式内容,比如<Stops id="123">里的id才是可以通过root.attrib['id']读取的属性- 你提供的示例XML中,根节点本身就是
<Stops>,没有设置任何属性,root.attrib为空白字典,使用root.attrib['Stops']取值自然会触发KeyError: 'Stops' - 你代码里混淆了XML节点的标签名和属性两个概念,
Stops是根节点的标签名,不属于属性范畴。
解决方法
根据你的实际开发需求,对应调整代码即可:
场景1:仅需要获取根节点标签名作为ShotCode取值
直接将报错的代码行替换为:
ShotCode = root.tag
修改后运行即可拿到Stops作为ShotCode的值,后续CSV写入逻辑可以正常执行。
场景2:需要将下所有子节点的内容写入CSV
如果你的目标是把XML里的cmp_name、cmp_id等字段和对应值都导出到CSV,可以直接遍历根节点的子节点取值,参考修改后的完整代码:
import os import csv import xml.etree.ElementTree as ET tree = ET.parse(os.path.join(folderpath, xmlfilename)) root = tree.getroot() filename, _ = xmlfilename.rsplit('.', 1) # 推荐用with上下文管理器自动处理文件关闭,避免资源泄漏 with open(filename + '.csv', 'w', newline='', encoding='utf-8') as f: csvwriter = csv.writer(f) # 先写表头 header = [child.tag for child in root] csvwriter.writerow(header) # 再写对应的值 row = [child.text.strip() if child.text else '' for child in root] csvwriter.writerow(row)
上面的代码会自动把
内容的提问来源于stack exchange,提问作者Priyanka Kadam
相关产品推荐
相关产品推荐

