У меня есть фрагмент ниже, который должен занимать постоянную память при разборе больших xmls (> 1 ГБ).Но это занимает довольно много.Не могу найти поток здесь.Кто-нибудь поможет?
from urllib.request import urlopen
import gzip
import csv
from pprint import pprint
from lxml import etree
response = urlopen("https://host/feed.xml.gz")
response = gzip.GzipFile(fileobj=response)
context = etree.iterparse(response, events=("start", "end"))
context = iter(context)
_, root = next(context)
csvfile = open('output.csv', 'w', newline='')
filt = 'some keyword, more keyword' # there is about 100 approximately
filt = [i.lower() for i in filt.split(',')]
fieldnames = ['title', 'company']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for event, job in context:
if event == "end" and job.tag == "job":
title = job.find('title').text
title_as_lower = title.lower()
for f in filt:
if f in title_as_lower:
company = job.find('company').text
writer.writerow({'title': title, 'company': company})
root.clear()
csvfile.close()