Как разбить XML-файл на Python?

У меня есть код Python для анализа XML-файла, как описано здесь . Я понимаю, что файлы XML печально известны тем, что при работе с памятью используются системные ресурсы. Мое решение работает для небольших файлов XML (скажем, 200 КБ, и у меня есть файл размером 340 МБ).

Я начал исследовать реализацию StAX (pull parser), но я работаю по жесткому графику, и я ищу гораздо более простой подход для этой задачи.

Я понимаю создание небольших фрагментов файлов, но как я могу извлечь нужные элементы, каждый раз выводя теги main / header?

Например, это схема:

<?xml version="1.0" ?> <!--Sample XML Document--> <bookstore> <book Id="1"> .... .... </book> <book Id="2"> .... .... </book> <book Id="3"> .... .... </book> .... .... .... <book Id="n"> .... .... </book> </bookstore> 

Как создать новые XML-файлы с данными заголовка для каждых 1000 элементов книги? Для конкретного примера кода и набора данных, пожалуйста, обратитесь к моему другому вопросу здесь . Большое спасибо.

Все, что я хочу сделать, – это избежать загрузки в память набора данных одновременно. Можем ли мы анализировать XML-файл потоковым способом? Думаю ли я по правильной линии?

ps: Мое положение похоже на вопрос, заданный в 2009 году. Я напишу ответ здесь, когда найду более простое решение для своей проблемы. Ваши отзывы приветствуются.

2 Solutions collect form web for “Как разбить XML-файл на Python?”

Вы можете анализировать свой большой XML-файл постепенно :

 from xml.etree.cElementTree import iterparse # get an iterable and turn it into an iterator context = iter(iterparse("path/to/big.xml", events=("start", "end"))) # get the root element event, root = next(context) assert event == "start" for event, elem in context: if event == "end" and elem.tag == "book": # ... process book elements ... root.clear() 

Вы можете использовать elementtree.iterparse и отбрасывать каждый тег книги после его обработки.

  • Python UTF-8 XML-синтаксический анализ (SUDS): удаление «недопустимого токена»
  • Как преобразовать XML в Dict
  • Получение текстовых значений из XML в Python
  • Использовать Scrapy для обхода локального XML-файла - Запустить адрес локального файла URL-адреса
  • Неблокирующий метод для разбора (потоковой передачи) XML в python
  • Разбирайте XML с (X) объектами HTML
  • Почему этот xpath не работает с использованием lxml в python?
  • Итерация нескольких (родительских, дочерних) узлов с использованием Python ElementTree
  • Python - лучший язык программирования в мире.