使用python进行XML增量解析

时间:2020-10-03 14:10:27

标签: python xml elementtree

我试图用下面的代码解析一个巨大的XML文件,并且每当我通过终端运行代码时,它都将运行而没有任何错误且不执行任何操作。在检查提交时间是否超过特定天数后,我需要它逐步解析文件并删除父元素。

例如,XML结构如下:

<Feed>
<Reviews>
<Review>
<SubmissionTime>2015-06-16T19:00:00.000-05:00</SubmissionTime>
</Review>
</Reviews
</Feed>
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

1 个答案:

答案 0 :(得分:0)

增量处理大型XML文件的方法是使用SAX
您将需要扩展xml.sax.ContentHandler并在其中添加逻辑。
有关示例,请参见https://www.tutorialspoint.com/parsing-xml-with-sax-apis-in-python

相关问题