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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:48:02