【问题标题】:memory efficient way to change and parse a large XML file in python在 python 中更改和解析大型 XML 文件的内存有效方法
【发布时间】:2023-03-11 07:23:01
【问题描述】:

我想在 python 中解析一个大型 XML 文件(25 GB),并更改其中的一些元素。

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

我在某处读到 SAX 速度很快,不会将整个文件加载到内存中,而是用于解析而不是修改。

'iterparse' 也应该只用于解析而不是修改。

还有其他快速且节省内存的选项吗?

【问题讨论】:

  • 试试 lxml,它有一些选项。
  • 修改后是否要写回磁盘?还是你要对修改后的树进行操作?
  • 我想找到一些感兴趣的元素并更改它们的属性值并将文件写入硬盘。

标签: python xml parsing sax elementtree


【解决方案1】:

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

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

您可以使用 SAX 读取每个元素并注册一个事件以在读取和修改每个元素后将其写回。如果您的更改真的很简单,那么甚至不用费心解析 XML 并只匹配您要查找的文本可能会更快。

如果您正在使用这么大的 XML 文件做任何有意义的工作,那么我会说您不应该使用 XML 文件,而应该使用数据库。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2012-02-23
    • 2020-10-16
    • 2015-06-07
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多