我正在尝试从大型XML文件(2G)中解析少量数据。
对于小文件,我只会使用
root_node.xpath('/the/specific/path/i/am/interested/in')
但是我已经读到这非常消耗内存。
对于大文件,this reference建议实现目标解析器或使用etree.iterparse
的方法。
尽管这些方法消耗的内存较少,但是仍然可以遍历整个树。
lxml
还可用于跳过所有不相关分支的迭代,即避免解析器输入吗?
例如,当我有
<the>
<irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
<specific>
<irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
<path>
<irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
<i>
<irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
<am>
<irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
<interested>
<irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
<in>
<!-- goal -->
</in>
</interested>
</am>
</i>
</path>
</specific>
</the>
解析器甚至不应输入<irrelevant_to_me>
-节点(无论其名称如何)。