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
相关产品推荐
相关产品推荐

