все 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Сообщить о неточности