Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何不加载整个文档,而是使用xml.etree.ElementTree逐行加载xml、python_Python_Xml_Elementtree_Xml.etree - Fatal编程技术网

如何不加载整个文档,而是使用xml.etree.ElementTree逐行加载xml、python

如何不加载整个文档,而是使用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

我使用了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 = 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树的指令应位于 循环的第一个(删除其缩进)

  • 最后,代码失败的基本原因可能是 输出文件名在引号中应为,因此将其更改为
    dom.write('output.xml')
    。 否则将出现执行错误


  • input.xml是一个非常大的文件吗?@mzjn是的,2gb。
    ElementTree.parse(full_file)
    将整个文件读取到内存中。有一些方法可以避免这种情况,例如使用
    iterparse()
    方法。首先看一下有关处理大型XML文件的类似问题: