Информация об изменениях

Сообщение [Python] Проблема с xml.etree.cElementTree от 28.09.2017 7:00

Изменено 28.09.2017 7:51 SmaLL75

[Python] Проблема с xml.etree.cElementTree
Здравствуйте!

Версии Python:
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Python 3.6.2 (default, Jul 20 2017, 08:43:29) [GCC 4.9.4] on linux

Обрабатывается большой xml-файл ~100мб (это не предел)

Используется функция последовательного разбора xml из пакета xml.etree.cElementTree

xml.etree.cElementTree.iterparse(xml, events=('start', 'end'))


Проблема в том, что при использовании iterparse пропускаются данные.

Это баг или фича? Можно ли решить или обойти проблему?

  пример xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pivotCacheRecords xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" count="236834">
<r>
<s v="3632025024"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<n v="1"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<s v="177230"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<d v="2014-10-17T00:00:00"/>
<n v="1051"/>
<x v="0"/>
<x v="0"/>
</r>
<r>
<s v="3632369876"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="1"/>
<x v="1"/>
<x v="1"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<n v="1"/>
<x v="0"/>
<x v="1"/>
<x v="0"/>
<s v="214239"/>
<x v="0"/>
<x v="1"/>
<x v="0"/>
<x v="1"/>
<x v="1"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<d v="2016-07-22T00:00:00"/>
<n v="407"/>
<x v="1"/>
<x v="0"/>
</r>
python elementtree xml
[Python] Проблема с xml.etree.cElementTree
Здравствуйте!

Версии Python:
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Python 3.6.2 (default, Jul 20 2017, 08:43:29) [GCC 4.9.4] on linux

Обрабатывается большой xml-файл ~100мб (это не предел)

Используется функция последовательного разбора xml из пакета xml.etree.cElementTree

for event, elem in ET.iterparse(xml, events=('start', 'end')):
    if event is "start":
....


Проблема в том, что при использовании iterparse пропускаются данные.

Это баг или фича? Можно ли решить или обойти проблему?

  пример xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pivotCacheRecords xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" count="236834">
<r>
<s v="3632025024"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<n v="1"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<s v="177230"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<d v="2014-10-17T00:00:00"/>
<n v="1051"/>
<x v="0"/>
<x v="0"/>
</r>
<r>
<s v="3632369876"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="1"/>
<x v="1"/>
<x v="1"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<n v="1"/>
<x v="0"/>
<x v="1"/>
<x v="0"/>
<s v="214239"/>
<x v="0"/>
<x v="1"/>
<x v="0"/>
<x v="1"/>
<x v="1"/>
<x v="0"/>
<x v="0"/>
<x v="0"/>
<d v="2016-07-22T00:00:00"/>
<n v="407"/>
<x v="1"/>
<x v="0"/>
</r>
python xml elementtree