держать 2 элемента в генераторе питона - PullRequest
0 голосов
/ 25 сентября 2019

При разборе большого XML я использую генератор, который выдает экземпляр класса, мой скелет кода выглядит следующим образом:

class Hold:
    def __init__(self, name, time, ...):
        self.name = name
        self.time = time 
        ...

def xml_parser(xmlfile):
    context = ET.iterparse(xmlfile, events=('start', 'end'))

    holdPattern, other_classes = None, ...
    number = 0
    for event, elem in context:
        if event == 'start':
            # opening tag, initialize an object
            if elem.tag == 'hold':
                holdPattern = Hold(None, None, None, ...)
        else:
            # get all of the properties
            if elem.tag == 'holdName':
                holdPattern.name = elem.text
            elif elem.tag == 'holdTime':
                holdPattern.time = elem.text
           ...
            # closing tag, end of the object
            elif elem.tag == 'hold':
                yield holdPattern


def insert_db(content):
    for item in xml_parser(content):
        if isinstance(item, Hold):
            print(item.__dict__)
            # manipulations with Hold
            ...

Вопрос - возможно ли держать 2 рядомобъекты при итерации внутри генератора?

Дело в том, что у меня есть объекты с геометрией линейной линии, которые строятся из 2 точек (1 точка из 1 объекта).Итак, мне нужно получить координаты Point объекта и координаты Point следующие ... Я пытался добавить его в список, но безуспешно: моя идея заключалась в добавлении item к списку в def insert_db(), но я получаю2 дублированных объекта ( вот похожий вопрос ).Мне до сих пор не ясно, как решить проблему.

Использование yield - это не мое дело? .. Мой XML-файл ~ 1 ГБ, и я не хотел бы перегружать мою систему

...