是否有用于Python的XML解析器可以解析文件流?我的XML文件太大,无法容纳在内存中,因此我需要解析流。
理想情况下,我不必具有root用户权限才能安装东西,因此lxml
不是一个很好的选择。
我一直在使用xml.etree.ElementTree
,但一直使用I am convinced it is broken。
使用xml.etree.cElementTree
。它比xml.etree.ElementTree
快得多。他们都没有坏。您的文件已损坏(请参阅我对其他问题的回答)。
这里是关于good answer在大型XML文件上的练习的xml.etree.ElementTree.iterparse
。 xml.etree.ElementTree.iterparse
也有该方法。用lxml
进行流解析的关键是手动清除和删除已处理的节点,否则将导致内存用完。
另一个选择是使用iterparse
。官方手册对我来说太正式了,并且缺少示例,因此需要对问题进行说明。默认解析器模块xml.sax
实现增量解析接口xml.sax
。也就是说xml.sax.expatreader
提供了合适的流解析器。
例如,给定一个XML流,例如:
xml.sax.xmlreader.IncrementalParser
可以通过以下方式处理。
xml.sax.make_parser()
您是否正在寻找<?xml version="1.0" encoding="utf-8"?>
<root>
<entry><a>value 0</a><b foo='bar' /></entry>
<entry><a>value 1</a><b foo='baz' /></entry>
<entry><a>value 2</a><b foo='quz' /></entry>
...
</root>
?就在标准库中。