如何不加载整个文档,而是使用xml.etree.ElementTree逐行加载xml、python
我使用了xml.etree.ElementTree库“for”循环,理论上应该逐行读取 不幸的是,这可能不是,因为在执行脚本后它会收到消息“Killed”,因此脚本不会逐行读取。谁能帮我个忙,给点建议 我是初学者 这是我的代码:如何不加载整个文档,而是使用xml.etree.ElementTree逐行加载xml、python,python,xml,elementtree,xml.etree,Python,Xml,Elementtree,Xml.etree,我使用了xml.etree.ElementTree库“for”循环,理论上应该逐行读取 不幸的是,这可能不是,因为在执行脚本后它会收到消息“Killed”,因此脚本不会逐行读取。谁能帮我个忙,给点建议 我是初学者 这是我的代码: from xml.etree import ElementTree file_name = 'input.xml' full_file = os.path.abspath(os.path.join('data', file_name)) dom = ElementT
from xml.etree import ElementTree
file_name = 'input.xml'
full_file = os.path.abspath(os.path.join('data', file_name))
dom = ElementTree.parse(full_file)
root = dom.getroot()
for offer in root.findall('offer'):
for category in offer.findall('category'):
if category.text == 'f':
a = ElementTree.SubElement(offer, 'freedelivery')
a.text = 'true'
dom.write(output.xml) ```
关于您的代码,我有以下评论:
dom=ElementTree.parse(完整文件)
读取整个输入文件
(不是逐行)for offer in root.findall('offer'):
for category in offer.findall('category'):
可替换为单个循环:
for category in root.findall('offer/category'):
dom.write('output.xml')
。
否则将出现执行错误input.xml是一个非常大的文件吗?@mzjn是的,2gb。
ElementTree.parse(full_file)
将整个文件读取到内存中。有一些方法可以避免这种情况,例如使用iterparse()
方法。首先看一下有关处理大型XML文件的类似问题: