用python进行XML增量解析

用python进行XML增量解析,python,xml,elementtree,Python,Xml,Elementtree,我正试图用下面的代码解析一个巨大的XML文件,每当我通过终端运行代码时,它都会在没有任何错误的情况下运行,并且什么也不做。我需要它以增量方式解析文件,并在检查提交时间是否早于特定天数后删除父元素 例如,XML结构如下所示: <Feed> <Reviews> <Review> <SubmissionTime>2015-06-16T19:00:00.000-05:00</SubmissionTime> </Review> <

我正试图用下面的代码解析一个巨大的XML文件,每当我通过终端运行代码时,它都会在没有任何错误的情况下运行,并且什么也不做。我需要它以增量方式解析文件,并在检查提交时间是否早于特定天数后删除父元素

例如,XML结构如下所示:

<Feed>
<Reviews>
<Review>
<SubmissionTime>2015-06-16T19:00:00.000-05:00</SubmissionTime>
</Review>
</Reviews
</Feed>

2015-06-16T19:00:00.000-05:00

增量处理大型XML文件的方法是使用。
您需要扩展
xml.sax.ContentHandler
并在其中添加逻辑。

看一个例子

这可能是一个评论而不是一个答案。在SAX内容处理程序中实现逻辑?我认为上面的答案是一个答案,因为它指向OP到一个明确的方向。这并不回答OP的主要问题:每当我通过终端运行代码时,它只是运行没有任何错误,什么也不做。从技术上讲,您建议使用不同的库来处理庞大的XML。
from lxml import etree, objectify
import logging, sys, iso8601
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
import re




def remove_per_age(file):
    datestring = datetime.now().strftime("%Y%m%d-%H%M%S")
    full_data = ""
    for event, elem in ET.iterparse(sys.argv[1], events=("end",)):
        if elem.tag == 'SubmissionTime':
            element_datetime = iso8601.parse_date(elem.text)
            element_date = element_datetime.date()
            if (element_date < datetime.now(element_datetime.tzinfo).date()-relativedelta(days=180)):
                elem.getparent().remove(elem)
            else:
                full_data += ET.tostring(elem)
        else:
            elem.clear()
    with open("output.xml", 'w') as f:
        f.write(full_data)
        
def strip_tag_name(tag):
    pattern = re.compile(r'\{.+\}')
    clean_tag = pattern.sub(r'', tag)
    return clean_tag

if __name__ == "__main__":
   remove_per_age(sys.argv[1])

#Reviews/Review/SubmissionTime