我试图用下面的代码解析一个巨大的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
答案 0 :(得分:0)
增量处理大型XML文件的方法是使用SAX。
您将需要扩展xml.sax.ContentHandler
并在其中添加逻辑。
有关示例,请参见https://www.tutorialspoint.com/parsing-xml-with-sax-apis-in-python