Я пытаюсь разобрать большой файл (> 2 ГБ) структурированных данных разметки, и памяти недостаточно для этого. Это оптимальный способ разбора класса XML для этого условия. Подробнее пожалуйста.Может ли Python xml ElementTree анализировать очень большой xml-файл?
ответ
Большинство библиотек DOM - как ElementTree - построят всю модель документа в ядре. Традиционно, когда ваша модель слишком велика, чтобы сразу вписаться в память, вам нужно использовать более ориентированный на поток парсер, например xml.sax.
Это часто бывает труднее, чем вы ожидаете, особенно когда используется для операций более высокого порядка, таких как работа со всем DOM одновременно.
Возможно ли, что ваш XML-документ является довольно простым, как
<entries>
<entry>...</entry>
<entry>...</entry>
</entries>
, который позволит вам работать на подмножествах данных в более ElementTree безопасным способом?
только API, я видел, что может справиться с такого рода вещи на все pulldom:
http://docs.python.org/library/xml.dom.pulldom.html
Pulldom использует SAX API для создания частичных узлов DOM; потянув за определенные поддеревья в группу, а затем отбросив их, когда вы закончите, вы можете получить эффективность SAX памяти с разумностью использования DOM.
Это неполный API; когда я использовал его, мне пришлось изменить его, чтобы он полностью использовался, но он работает как основа. Я больше не использую его, поэтому не помню, что я должен был добавить; просто предварительное предупреждение.
Это очень медленно.
XML - очень плохой формат для обработки больших наборов данных. Если у вас есть какой-либо контроль над исходными данными, и если это имеет смысл для набора данных, вам намного лучше разбить данные на более мелкие куски, которые можно полностью проанализировать в памяти.
Другой вариант - использование SAX API, но они представляют собой серьезную боль, чтобы сделать что-то нетривиальное с помощью непосредственно.
Проверьте функцию iterparse()
. Описание того, как вы можете использовать его для анализа очень больших документов, можно найти here.
Функция iterparse() решит вашу проблему, я недавно проанализировал документ размером 1GB xml с помощью iterparse :) –
- 1. Синтаксических очень большой HTML-файл с Python (ElementTree?)
- 2. Python XML Parsing с ElementTree
- 3. Синтаксический XML с Python ElementTree
- 4. Процесс очень большой XML-файл
- 5. Python XML ElementTree tag wildcard
- 6. ElementTree: Разборчивость правнуков XML
- 7. ElementTree не может разобрать Юникода XML
- 8. Python ElementTree: как добавить SubElement в ОЧЕНЬ конкретную позицию?
- 9. Содержимое Python ElementTree xml как строка
- 10. Python XML ElementTree Удаление всех элементов
- 11. Python ElementTree: ElementTree vs root Element
- 12. Очень, очень, очень большой div
- 13. Как правильно разобрать этот XML? Python - ElementTree
- 14. Python development - elementtree XML и строковые операции
- 15. Python Анализировать одна строка XML
- 16. Python ElementTree вывода XML в CSV
- 17. Python xml ElementTree findall возвращает пустой результат
- 18. Python, XML-синтаксический анализ и Elementtree
- 19. Анализ XML в Python с использованием ElementTree
- 20. Python XML разбора с ElementTree возвращает None
- 21. Использование ElementTree для синтаксического анализа XML-python
- 22. Анализ XML с помощью python и ElementTree
- 23. Python xml ElementTree из источника строки?
- 24. Получить атрибут XML, используя ElementTree Python
- 25. Python 2.5: ElementTree и UML в XML
- 26. Python ElementTree XML-анализ с несколькими ответами
- 27. Анализировать XML Sitemap с Python
- 28. Анализировать/чтение Большой XML-файл с минимальным объемом памяти
- 29. Может ли JAXB анализировать большие XML-файлы в кусках
- 30. Анализировать XML Конверт в Python
спасибо. – zhangwf