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