我有一个 Python 程序需要解析和处理大型 XML 文件,但在处理几 GB 大小的文件时遇到性能问题。
我目前正在使用
ElementTree
库,但它对于我的用例来说似乎太慢了。在 Python 中是否有更有效的方法来解析和处理大型 XML 文件?处理如此大的 XML 文件时,我可以使用哪些库或技术来提高程序的性能?
如果您需要比 ElementTree 更好的性能,您可以使用 cElementTree。 如果您正在解析大型 xml,请考虑使用 SAX 解析器。 另外,lxml 也能提供更好的性能。 https://lxml.de/sax.html
cElementTree 的 iterparse 还可以增量解析大型 XML。
您还可以清除或删除已处理的元素以保持较低的内存使用量。 如果您需要使用 Dom 来执行某些任务,请查看是否可以使用 sax 解析器将文档拆分到某个子标签上,并发出该 xml 多处理池以再次解析并使用 xml 解析器来执行您的任务。
对广告表示歉意,但另一种解决方案是将处理传递给 XSLT 3.0 的流式实现,例如我公司的 SaxonC-EE 库。这是一个商业产品;它有一个方便的Python API。
任何处理 XML 的流式方法都会比基于树的 API 花费更多精力,因为您必须仔细考虑在流式传输文档时要保留哪些信息。但使用 XSLT 等声明性语言的优点是您无需操作可变状态,这意味着您的代码出现错误的可能性要小得多。