我正在处理一个相当大的 XML 文件,我需要解析和内存使用问题,我正在考虑只读取这个文件的一部分,有没有办法做到这一点。谢谢。
问问题
498 次
2 回答
2
根据您的数据格式,ElementTree(此处、此处)或 lxml(支持 ElementTree API;此处、此处)可能会满足您的需求。它有点混合了面向事件和面向 DOM 的解析器,允许您使用 iterparse() 方法迭代高级子树,依次询问每个子树的内部。
这种方法比 SAX 慢(在我的使用中,我注意到它需要 2-4 倍的时间),但生成的代码最终更容易理解、维护和重用。与直接的 DOM 解析器相比,由于它在迭代期间丢弃访问过的元素,因此内存使用更易于管理。我的经验只是使用内置的 xml.etree.ElementTree 库;lxml 或其他支持 API(或以不同方式执行类似功能)的库将具有不同的特性。
如果您可以轻松地将文档分解成块,ElementTree 可以很好地迭代工作——例如,一个包含数千个产品描述的文档,其中根元素本质上包含一个可以轻松迭代的产品列表。另一方面,如果您的文档仅包含大量非结构化/未解析的数据,那么您可能还有一些工作要做,以使内存使用易于管理。
希望有帮助。
于 2012-12-23T20:28:35.130 回答