Почему большой синтаксический анализ XML не работает здесь, как ожидалось? - PullRequest
0 голосов
/ 28 мая 2018

У меня есть фрагмент ниже, который должен занимать постоянную память при разборе больших 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()
...