如何解决使用python进行XML增量解析
我试图用下面的代码解析一个巨大的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
解决方法
增量处理大型XML文件的方法是使用SAX。
您将需要扩展xml.sax.ContentHandler
并在其中添加逻辑。
有关示例,请参见https://www.tutorialspoint.com/parsing-xml-with-sax-apis-in-python
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。