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

