Найти - Пользователи
Полная версия: Парсинг очень огромных ХML файлов
Начало » Python для новичков » Парсинг очень огромных ХML файлов
1
cal-lek
Доброго времени суток всем питоновцам!

Возникла задача загрузки данных из XML очень большого размера (файл порядка 60 Мб и 1,5 млн. строк). Структура примерно такая:
<?xml version="1.0" encoding="Windows-1251" ?>
<Файлик>
<ИмяФайла>01247.XML</ИмяФайла>
<ЗаголовокФайла>
<ВерсияФормата>07.00</ВерсияФормата>
<ТипФайла>ВНЕШНИЙ</ТипФайла>
</ЗаголовокФайла>
<ОПИСЬ>
<СоставДокументов>
<Количество>1</Количество>
<НаличиеДокументов>
<ТипДокумента>Документики</ТипДокумента>
<Количество>4</Количество>
</НаличиеДокументов>
</СоставДокументов>
<ДатаСоставления>27.07.2010</ДатаСоставления>
<Организация>
<НаименованиеОрганизации>Какое-то название</НаименованиеОрганизации>
</Организация>
</ОПИСЬ>
<СОДЕРЖАНИЕ_ДОКУМЕНТА>
<ФИО>
<Фамилия>ИВАНОВ</Фамилия>
<Имя>ИВАН</Имя>
<Отчество>ИВАНОВИЧ</Отчество>
</ФИО>
<ДатаРождения>27.07.2010</ДатаРождения>
</СОДЕРЖАНИЕ_ДОКУМЕНТА>

<СОДЕРЖАНИЕ_ДОКУМЕНТА>
<ФИО>
<Фамилия>ИВАНОВ</Фамилия>
<Имя>ИВАН</Имя>
<Отчество>ИВАНОВИЧ</Отчество>
</ФИО>
<ДатаРождения>27.07.2010</ДатаРождения>
</СОДЕРЖАНИЕ_ДОКУМЕНТА>

<СОДЕРЖАНИЕ_ДОКУМЕНТА>
<ФИО>
<Фамилия>ИВАНОВ</Фамилия>
<Имя>ИВАН</Имя>
<Отчество>ИВАНОВИЧ</Отчество>
</ФИО>
<ДатаРождения>27.07.2010</ДатаРождения>
</СОДЕРЖАНИЕ_ДОКУМЕНТА>
</Файлик>
Разбор через minidom не подходит, а через sax-интерфейс не удалось найти полноценного примера для разбора такой структуры (с питоном только начинаю дружить). Возможно ли разобрать сей документ и намертво не вешать систему при этом?
AlexAV
Я конечно не спец, и большие файлы не пробовал разбирать, но пока никто ничего не посоветовал, предложу посмотреть в сторону lxml.
cal-lek
AlexAV
Я конечно не спец, и большие файлы не пробовал разбирать, но пока никто ничего не посоветовал, предложу посмотреть в сторону lxml.
lxml попадался уже на глаза, но насколько правильно я понял, он сначала парсит весь документ, прежде чем что-то можно делать с данными
Александр Кошелев
Большие файлы конечно нужно парсить потоком через SAX. Изучайте его.
AlexAV
Если нужно разбираться с SAX, то наверное можно глянуть книгу “Python & XML” авторов Christopher A. Jones Fred L. Drake, Jr. издательства O'Reilly
cal-lek
Daevaorn
Большие файлы конечно нужно парсить потоком через SAX. Изучайте его.
При парсинге возникла проблема, когда переопределяются методы startElement() endElement() не нашел как получить значение тегов XML, т.е. например:
<Количество>1</Количество>
в обработчике события startElement(name, attrs) в переменной name находится тег “Количество”, а вот как получить значение “1”? словарь attrs все время пустой.

Хотелось бы увидеть простенький пример кода, где реализован весь принцип обработки XML
regall
cal-lek
а вот как получить значение “1”
Это значение не является атрибутом тега - это есть подэлемент, только сущность его не ТЕГ, а ТЕКСТ.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB