如何在 Python 中有效地解析和处理大型 XML 文件?

How to efficiently parse and process large XML files in Python?

提问人: 提问时间:9/19/2023 更新时间:9/20/2023 访问量:74

问:

我有一个需要解析和处理大型 XML 文件的 Python 程序,但在处理大小为 GB 的文件时遇到了性能问题。

我目前正在使用该库,但对于我的用例来说似乎太慢了。是否有更有效的方法来解析和处理 Python 中的大型 XML 文件?在处理如此大的 XML 文件时,可以使用哪些库或技术来提高程序的性能?ElementTree

python xml xml 解析

评论

1赞 Adam.Er8 9/19/2023
这回答了你的问题吗?在 Python 中解析大型 XML 文档的最快方法是什么?
0赞 Hermann12 9/20/2023
看看非阻塞解析器:py doc

答:

0赞 YOGENDRA SONI 9/19/2023 #1

如果您需要比 ElementTree 更好的性能,您可以使用 cElementTree。 如果要解析大型 xml,请考虑使用 SAX 解析器。 或者,lxml 也提供了更好的性能。https://lxml.de/sax.html

cElementTree 的 iterparse 也可以以增量方式解析大型 XML。

您还可以清除或删除已处理的元素,以保持较低的内存使用率。 如果您需要将 Dom 用于某些任务,请查看是否可以使用 SAX 解析器将文档拆分到某个子标签上,并发出该 XML 多处理池以再次解析并使用 XML 解析器来执行您的任务。

2赞 Michael Kay 9/20/2023 #2

对于广告,我们深表歉意,但另一种解决方案是将处理传递给 XSLT 3.0 的流式实现,例如我公司的 SaxonC-EE 库。这是一个商业产品;它有一个方便的 Python API。

任何处理 XML 的流式处理方法都比基于树的 API 更费力,因为您必须仔细考虑在流式处理文档时要保留哪些信息。但是,使用像 XSLT 这样的声明性语言的好处是,您无需操作可变状态即可执行此操作,这意味着您的代码不太可能出现错误。