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

Python实现XML转CSV时<property>标签属性提取及空值处理问题

问题根因

现有代码仅提取了<car>标签下的直接子节点值,未对带name属性的<property>标签做提取逻辑,因此后4列为空。

修改后完整代码

import csv
import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")
root = tree.getroot()
# 用with语法自动管理文件关闭,更稳妥
with open('ResidentData.csv', 'w', encoding='utf-8-sig', newline='') as Resident_data:
    csvwriter = csv.writer(Resident_data)
    resident_head = ["ID", "NAME", "DESC", "IMG", "PRICE", "TYPE", "URL", "COLOR", "PRODUCE", "SYSID"]
    # 直接写表头不用count判断,更简洁
    csvwriter.writerow(resident_head)
    start = 0
    for member in root.findall('car'):
        offers = []
        # 原有6个字段提取逻辑,新增空值兼容
        ID = member.find('id').text if member.find('id') is not None else ''
        offers.append(ID)
        NAME = member.find('name').text if member.find('name') is not None else ''
        offers.append(NAME)
        DESC = member.find('description').text if member.find('description') is not None else ''
        offers.append(DESC)
        IMG = member.find('image').text if member.find('image') is not None else ''
        offers.append(IMG)
        PRICE = member.find('cost').text if member.find('cost') is not None else ''
        offers.append(PRICE)
        CAT = member.find('cat').text if member.find('cat') is not None else ''
        offers.append(CAT)

        # 新增property标签提取逻辑
        prop_dict = {}
        for prop in member.findall('property'):
            prop_name = prop.get('name')
            prop_value = prop.text if prop.text is not None else ''
            prop_dict[prop_name] = prop_value
        # 按表头顺序取值,不存在的属性默认返回空字符串,兼容缺失场景
        offers.append(prop_dict.get('Url', ''))
        offers.append(prop_dict.get('Color', ''))
        offers.append(prop_dict.get('Produce', ''))
        offers.append(prop_dict.get('SystemID', ''))

        csvwriter.writerow(offers)
        start += 1
        print(start)

关键修改说明

  • 新增<property>标签的遍历逻辑,将所有属性名和对应值存入字典,方便后续取值
  • 用字典的get方法取值,不存在的属性默认返回空字符串,可兼容SYSID、COLOR等属性缺失的场景
  • 优化了文件操作逻辑,用with语法自动管理文件关闭,避免异常场景下文件未正常关闭的问题
  • 给原有字段也增加了空值判断,避免节点不存在时报错
  • 新增newline=''参数,避免Windows环境下CSV写入出现多余空行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:15:02