You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

上面的代码会自动把下所有子节点的标签作为CSV表头,对应内容作为行数据写入。

内容的提问来源于stack exchange,提问作者Priyanka Kadam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:45:03