我想在python中解析一个大的XML文件(25 GB),并更改它的一些元素。
我尝试了xml.etree中的ElementTree,但在第一步(ElementTree.parse)需要花费太多时间。
我在某处读到SAX很快并且没有将整个文件加载到内存中,但它只是用于解析而不是修改。
'iterparse'也应仅用于解析不修改。
还有其他快速且内存效率高的选项吗?
答案 0 :(得分:2)
这里重要的是你需要一个流解析器,这就是sax。 (在python中有一个内置的sax实现,而lxml提供了一个。)问题是,由于你试图修改xml文件,你必须在读取时重写xml文件。
XML文件是一个文本文件,您无法在不重写整个文本文件的情况下更改文本文件中间的某些数据(除非数据的大小完全相同,不太可能)
您可以使用SAX读入每个元素并注册一个事件,以便在读取和修改每个元素后回写它们。如果您的更改非常简单,那么甚至可以更快地解决XML解析问题,只需匹配您正在寻找的文本。
如果你正在使用这个庞大的XML文件做任何重要的工作,那么我会说你不应该使用XML文件,你应该使用数据库。
您遇到的问题与大型机上的Cobol程序员在使用基于文件的数据时遇到的问题相同