Python XML转CSV脚本新增字段后仅输出首条记录求助
XML转CSV仅写入第一条记录修复方案
核心问题排查优先级
1. 特殊字符导致写入截断
abstract、publisher字段通常包含逗号、换行符、双引号等CSV默认特殊字符,未做转义处理时会直接中断写入流程。
修复代码示例:
import csv # 写入CSV时强制所有字段加双引号包裹,自动转义特殊字符 with open("output.csv", "w", encoding="utf-8", newline="") as f: # 普通writer写法 writer = csv.writer(f, quoting=csv.QUOTE_ALL) # DictWriter写法同理 # writer = csv.DictWriter(f, fieldnames=["resource_type", "names", "abstract", "publisher"], quoting=csv.QUOTE_ALL) writer.writeheader() # 后续写入逻辑保持不变
2. 节点缺失触发异常终止
abstract、publisher属于非必填XML节点,部分记录无对应节点时,直接取.text属性会抛出AttributeError,终止脚本运行,仅能写入无节点缺失的前几条记录。
修复代码示例:
import xml.etree.ElementTree as ET # 封装安全取值方法,节点缺失时返回空字符串,不会触发异常 def safe_get_text(record, tag_path, default=""): target_node = record.find(tag_path) return target_node.text.strip() if target_node is not None and target_node.text else default # 遍历每条记录时的取值逻辑 for record in ET.parse("你的源文件.xml").getroot().findall("records/*"): resource_type = safe_get_text(record, ".//resource_type") names = safe_get_text(record, ".//names") abstract = safe_get_text(record, ".//abstract") publisher = safe_get_text(record, ".//publisher") # 执行写入操作 writer.writerow([resource_type, names, abstract, publisher])
3. 遍历逻辑错误
检查XML遍历的XPath路径是否匹配所有记录节点,CSV写入逻辑是否放在遍历循环内部,避免误将写入操作移出循环导致仅写入最后/第一条记录。可在循环内增加打印语句,确认所有记录都能被正常遍历。
内容的提问来源于stack exchange,提问作者Brian C.
相关产品推荐
相关产品推荐

