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

XML提取AbstractText内容写入文本文件仅保留最后一条的问题求助

解决XML提取AbstractText后仅最后一条写入文件的问题

嘿,我瞅了下你的问题,这大概率是文件写入模式用错啦!你应该是在循环里每次打开文件都用了w(写入)模式,这个模式会清空原有内容重新写入,循环跑完自然就只剩最后一个AbstractText的内容了。给你两种简单的解决办法:

方案1:先收集所有内容再一次性写入

这种方法效率更高,还能方便你后续对内容做统一处理:

import xml.etree.ElementTree as et

# 解析XML文件(注意路径前加r避免转义问题)
tree = et.parse(r"C:\Users\harsh\OneDrive\Desktop\DataSets\zika.xml")
pubmed_articles = tree.findall('PubmedArticle')

# 收集所有AbstractText的有效内容
abstract_list = []
for article in pubmed_articles:
    # 直接定位所有AbstractText标签,比遍历所有节点高效得多
    for abstract_node in article.findall('.//AbstractText'):
        # 跳过空内容的标签
        if abstract_node.text:
            abstract_list.append(abstract_node.text.strip())

# 一次性写入文件,用换行分隔不同摘要
with open("abstracts.txt", "w", encoding="utf-8") as f:
    f.write("\n\n".join(abstract_list))

方案2:用追加模式写入文件

如果你不想提前收集所有内容,每次写入时改用a(追加)模式,这样新内容会加到文件末尾而不是覆盖原有内容:

import xml.etree.ElementTree as et

tree = et.parse(r"C:\Users\harsh\OneDrive\Desktop\DataSets\zika.xml")
pubmed_articles = tree.findall('PubmedArticle')

# 遍历每个文章的AbstractText标签,追加写入文件
for article in pubmed_articles:
    for abstract_node in article.findall('.//AbstractText'):
        if abstract_node.text:
            # 用a模式打开,每次写入都追加到末尾
            with open("abstracts.txt", "a", encoding="utf-8") as f:
                f.write(abstract_node.text.strip() + "\n\n")

另外提个小优化:你之前用getiterator()遍历所有节点的做法效率很低,直接用findall('.//AbstractText')可以精准定位到所有AbstractText标签,代码更简洁也更快哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:10:37