繁体   English   中英

在python中更改和解析大型XML文件的内存有效方式

[英]memory efficient way to change and parse a large XML file in python

我想用python解析大型XML文件(25 GB),并更改其某些元素。

我从xml.etree中尝试了ElementTree,但是第一步(ElementTree.parse)花费了太多时间。

我在某处读到SAX很快,并且没有将整个文件加载到内存中,但这只是为了解析而不是修改。

“ iterparse”也应仅用于解析而不是修改。

还有其他快速且高效存储的选择吗?

对您而言重要的是,您需要一个流解析器,即sax。 (在python中有一个内置的sax实现,而lxml提供了一个。)问题在于,由于您试图修改xml文件,因此您在阅读时必须重写xml文件。

XML文件是一个文本文件,您不能在不重写整个文本文件的情况下去更改文本文件中间的某些数据(除非数据大小完全相同,这是不可能的)

您可以使用SAX读取每个元素,并注册一个事件以在读取和修改每个元素后写回。 如果您所做的更改确实很简单,那么甚至不用理会XML解析,只需匹配文本即可找到所需的内容,甚至更快。

如果您正在使用如此大的XML文件进行任何重要的工作,那么我会说您不应该使用XML文件,而应该使用数据库。

您在这里遇到的问题与大型机上的Cobol程序员使用基于文件的数据时遇到的问题相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM