Python Glossary English

все Python 3xml.etree.ElementTreeфункция

xml.etree.ElementTree.iterparse()

потоковый разбор

Разбирает XML-файл постепенно и выдаёт пары (событие, элемент) — для больших файлов, которые не помещаются в память целиком.

Синтаксис

for event, elem in ET.iterparse(source, events=None):

Сам по себе iterparse память не экономит: дерево всё равно растёт до конца документа, пока вы не вызываете elem.clear() у обработанных элементов. На событии 'start' text и дети элемента ещё не прочитаны — содержимое берите на 'end'. По умолчанию приходят только события 'end'. Чтение блокирующее; для данных из сети нужен XMLPullParser. С 3.15 незакрытый итератор по имени файла выдаёт ResourceWarning.

Примеры

import xml.etree.ElementTree as ET
import io
data = io.BytesIO(b'<r><i>1</i><i>2</i><i>3</i></r>')
total = 0
for event, elem in ET.iterparse(data):
    if elem.tag == 'i':
        total += int(elem.text)
        elem.clear()
print(total)  # → 6
import xml.etree.ElementTree as ET
import io
it = ET.iterparse(io.BytesIO(b'<r><i/></r>'), events=('start', 'end'))
print([(ev, el.tag) for ev, el in it])
# → [('start', 'r'), ('start', 'i'), ('end', 'i'), ('end', 'r')]
print(it.root.tag)  # → r

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности