当前位置: 首页 > 面试题库 >

使用cElementTree.iterparse解析XML的Python内存不足

嵇永望
2023-03-14
问题内容

我的XML解析功能的简化版本在这里:

import xml.etree.cElementTree as ET

def analyze(xml):
    it = ET.iterparse(file(xml))
    count = 0

    for (ev, el) in it:
        count += 1

    print('count: {0}'.format(count))

这会导致Python的内存不足,这没有任何意义。我真正存储的唯一内容是计数,一个整数。

看到内存和CPU使用率突然下降了吗?那是Python的惊人崩溃。至少它给了我一个MemoryError(取决于我在循环中所做的事情,它给了我更多的随机错误,如IndexError)和堆栈跟踪而不是段错误。但是为什么会崩溃?


问题答案:

该文档确实告诉您“将XML节逐步地解析
到元素树中
(我的重点)”,但没有涉及如何避免保留不感兴趣的元素(可能是所有元素)。这是由覆盖本文由effbot。

我强烈建议使用的任何人.iterparse()都应该阅读Liza
Daly的这篇文章
。它涵盖了lxml[c]
ElementTree。



 类似资料:
  • 我正在尝试获取XML文件并将其解析到数据库中。XML是用GZIP压缩的。GZIP文件是~8MB。当我在本地运行代码时,pythonw上的内存将被占用。exe的版本升级到整个系统(Windows 7)停止响应的级别,当我在线运行它时,它超过了Google App Engine上的内存限制。不确定文件是否太大或我是否做错了什么。任何帮助都将不胜感激! 使现代化 所以我试着按照BasicWolf的建议切

  • 问题内容: 我正在用SAX解析XML文件,有时需要元素的内部XML。例如,对于以下XML 我需要获取元素 a 的内部XML ,这将是 最简单的方法是什么? 谢谢。 伊万 问题答案: 对于这种情况,我建议使用2个内容处理程序。第一个负责查找文档的相关部分,第二个负责处理内容。我对类似问题的答案(请参见下面的链接)演示了如何实现此方法: 使用SAX解析常见的XML元素

  • 问题内容: 我想使用python解析一个简单的小型XML文件,但是在pyXML上的工作似乎已经停止了。如果可能的话,我想使用python 2.6。谁能推荐可以与2.6兼容的XML解析器? 谢谢 问题答案: 如果它既小又简单,则只需使用标准库即可: 这将返回实现标准文档对象模型API的DOM树 如果以后需要执行诸如模式验证或XPath查询之类的复杂操作,那么我建议使用第三方lxml模块,它是流行的l

  • 问题内容: 我编写了一个简单的脚本,用于使用BeautifulSoup模块解析XML聊天日志。标准的soup.prettify()可以正常工作,只是聊天日志中有很多绒毛。您可以在下面看到脚本代码和我正在使用的一些XML输入文件: 码 测试XML输入 我希望能够将其输出为以下格式或至少比纯XML更可读的格式: 乔恩:嘿,怎么了?[10/31/10 @ 3:43p] 乔恩:收到了您的消息[10/31/

  • 本文向大家介绍Python中使用ElementTree解析XML示例,包括了Python中使用ElementTree解析XML示例的使用技巧和注意事项,需要的朋友参考一下 【XML基本概念介绍】 XML 指可扩展标记语言(eXtensible Markup Language)。 XML 被设计用来传输和存储数据。 概念一: 概念二: 概念三: 概念四: 概念五: 概念六: 【XML几种解析方法】

  • 我正在尝试使用kotlin中的simplexml解析rss提要。 该订阅源是itunes的顶级播客订阅源 返回的数据具有以下结构: 我关心的部分是条目标签包含的播客列表。 我的模型类如下所示: 我有一个简单的单元测试,从文件中加载xml,将其传递给简单的exml反序列化器,然后将输出与一些预期的模型进行比较。 当我运行测试时,我得到一个异常: 向@ElementList注释中添加必需=false会