在python中更改和解析大型XML文件的高效内存方法
我想用python解析一个大的XML文件(25GB),并更改其中的一些元素 我尝试了xml.etree中的ElementTree,但在第一步(ElementTree.parse)时花费了太多时间 我在某个地方读到SAX很快,不会将整个文件加载到内存中,但它只是用于解析而不是修改 “iterparse”也应该仅用于解析,而不是修改在python中更改和解析大型XML文件的高效内存方法,python,xml,parsing,sax,elementtree,Python,Xml,Parsing,Sax,Elementtree,我想用python解析一个大的XML文件(25GB),并更改其中的一些元素 我尝试了xml.etree中的ElementTree,但在第一步(ElementTree.parse)时花费了太多时间 我在某个地方读到SAX很快,不会将整个文件加载到内存中,但它只是用于解析而不是修改 “iterparse”也应该仅用于解析,而不是修改 有没有其他快速且内存高效的选项?这里对您来说重要的是您需要一个流解析器,这就是sax。(python中有一个内置的sax实现,lxml提供了一个实现。)问题是,由于您试
有没有其他快速且内存高效的选项?这里对您来说重要的是您需要一个流解析器,这就是sax。(python中有一个内置的sax实现,lxml提供了一个实现。)问题是,由于您试图修改xml文件,因此必须在读取xml文件时重写它 一个XML文件是一个文本文件,不能在文本文件中间改变一些数据而不重写整个文本文件(除非数据是完全相同的大小,这是不可能的) 您可以使用SAX读入每个元素,并注册一个事件,以便在读取和修改每个元素后将其写回。若您所做的更改非常简单,那个么甚至不用担心XML解析,只需将文本匹配到您要查找的内容,可能会更快 如果您正在处理这么大的XML文件,那么我认为您不应该使用XML文件,而应该使用数据库
您在这里遇到的问题与大型机上的Cobol程序员在处理基于文件的数据时遇到的问题相同试试lxml,它有一些选项。修改后,是否要将其写回磁盘?还是要在修改后的树上执行操作?我想找到一些感兴趣的元素,更改它们的属性值,并将文件写入硬盘。