使用python将文件部分加载到内存中

时间:2012-12-23 19:29:39

标签: python xml file

我正在处理我需要解析的相当大的XML文件以及内存使用问题我正在考虑只读取此文件的一部分,有没有办法做到这一点。谢谢。

2 个答案:

答案 0 :(得分:2)

根据您的数据格式,ElementTree(herehere)或lxml(支持ElementTree API; herehere)可能会做什么你需要。它是event-oriente和面向DOM的解析器之间的混合体,允许你使用iterparse()方法迭代高级子树,依次查询每个子树的内部。

这个方法比SAX慢(在我的使用中我注意到它需要花费2-4倍的时间),但最终的代码最终会更容易理解,维护和重用。与直接DOM解析器相比,由于它在迭代期间丢弃了访问过的元素,因此内存使用更易于管理。我的经验只有内置的xml.etree.ElementTree库; lxml或其他支持API(或以不同方式执行类似功能)的库将具有不同的特征。

如果您可以轻松地将文档分成多个块,则ElementTree可以很好地迭代运行 - 例如,包含数千个产品描述的文档,其中根元素基本上包含可以轻松迭代的产品列表。另一方面,如果您的文档只包含大量非结构化/未分析的数据,那么您仍然需要做一些工作才能使内存使用可管理。

希望有所帮助。

答案 1 :(得分:1)

我会使用lxmletree部分来解析非常大的xml个文件。

这篇文章中有关于该过程的更好解释,High-performance XML

lxml documentation

这将为您提供快速且以内存有效方式处理非常大的xml的最佳方法。