为什么 elementtree.ElementTree.iterparse 使用这么多内存?

2023-12-06

我正在使用 elementtree.ElementTree.iterparse 来解析一个大的 (371 MB) xml 文件。

我的代码基本上是这样的:

outf = open('out.txt', 'w') 
context = iterparse('copyright.xml')
context = iter(context)
dummy, root = context.next()

for event, elem in context:
    if elem.tag == 'foo':
        author = elem.text

    elif elem.tag == 'bar':
        if elem.text is not None and 'bat' in elem.text.lower():
            outf.write(elem.text + '\n')
    elem.clear()   #line A
    root.clear()   #line B

我的问题有两个:

首先 - 我是否需要 A 和 B(请参阅代码片段注释)?有人告诉我 root.clear() 会清除不必要的子项,因此内存不会被吞噬,但这是我的观察结果:使用 B 而不是 A 与不使用两者在内存消耗方面是相同的(用任务管理器绘制)。仅使用 A 似乎与同时使用 A 相同。

第二 - 为什么这仍然消耗这么多内存?程序运行时,接近尾声时会使用大约 100 MB 的 RAM。

我认为这与 outf 有关,但为什么呢?不就是写入磁盘吗?如果它在 outf 关闭之前存储该数据,我该如何避免这种情况?

其他信息: 我在 Windows 上使用 Python 2.7.3。


(发布的代码(第二行缩进)不应运行。)http://bugs.python.org/issue14762是一个类似的问题,答案是您应该清除每个元素(A 行)。如果不知道 outf 是什么(或创建它的代码),就很难回答第二个问题。如果它是一个 StringIO 对象,答案就很明显了。您可以查看跟踪器问题的第二条消息中链接的教程:

http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 elementtree.ElementTree.iterparse 使用这么多内存? 的相关文章

  • 管理 Tweepy API 搜索

    如果这是对之前在其他地方回答过的问题的粗略重复 请原谅我 但我不知道如何使用 tweepy API 搜索功能 是否有任何有关如何使用搜索推文的文档api search 功能 有什么方法可以控制返回的推文数量 结果类型等功能 由于某种原因 结
  • 合并数据框中的值以写入 Excel

    我有一个看起来像的数据框 column1 column2 column3 colum4 column5 1 r n 1 r s 1 r n 2 r s 3 r n 3 2 r n 1 r s 1 r n 4 r s 4 r n 5 3 r
  • sphinx 中的分组方法文档字符串

    是否可以使用 sphinx 的 autodoc 功能将多个方法文档字符串分组 以便将它们列在一起 class Test object def a self A method of group foo def b self A method
  • Python Pandas 从宽到长的格式更改以及列标题拆分

    我有一个包含以下列标题和行示例的表 Subject Test1 Result1 Test1 Result2 Test2 Result1 Test2 Result2 0 John 10 0 5 20 0 3 我想将其改造成 Subject l
  • 如何在不破坏默认行为的情况下覆盖 __getattr__ ?

    我如何覆盖 getattr https docs python org 3 reference datamodel html object getattr 类的方法而不破坏默认行为 压倒一切 getattr 应该没事 getattr 仅作为
  • 如何使用 boto3 从 AWS Cognito 获取经过身份验证的身份响应

    我想使用 boto3 获取访问 AWS 服务的临时凭证 用例是这样的 我的 Cognito 用户池中的用户登录到我的服务器 我希望服务器代码为该用户提供访问其他 AWS 服务的临时凭证 我有一个存储我的用户的 Cognito 用户池 我有一
  • 保存 xml 文档会导致文件损坏

    我有一个关于如何将 xmldoc 保存为 word 文件的问题 我想打开 word 文件 使用 xmldocument 类对潜在的 xml 结构进行一些操作 然后将其重新保存回 word 文件 这就是我目前正在做的事情 using Word
  • Python 列表理解不适用于 itertools.groupby 解码

    我正在尝试解码结果itertools groupby到一个值列表中 我的来源是 x 1 2 2 1 6 3 6 5 1 3 最初的方法是使用 for 语句来实现 如下所示 keyfunc itemgetter 0 groups unique
  • 如何充分释放函数中使用的GPU内存

    我在用着cupy在接收一个函数numpy数组 将其推到 GPU 上 对其进行一些操作并返回cp asnumpy它的副本 问题 函数执行后内存没有被释放 如ndidia smi 我知道内存的缓存和重用cupy 但是 这似乎仅适用于每个用户 当
  • 为什么我不能“string”.print()?

    我的理解print 在 Python 和 Ruby 以及其他语言 中 它是字符串 或其他类型 上的方法 因为它的语法非常常用 打印 嗨 works 那么为什么不呢 hi print 在 Python 中或 hi print在红宝石工作 当你
  • 比较两个文本文件并计算差异

    我一直在尝试在Python中比较两个文本文件 本质上我想打开它们并一次比较一个字符 如果字符不同 则向计数器添加1 然后显示该值 这是我到目前为止所拥有的 usr bin env python diff 0 import random im
  • Microsoft Azure 数据仓库和 SqlAlchemy

    我正在尝试使用 python 的 sqlalchemy 库连接到 microsoft azure 数据仓库 并收到以下错误 pyodbc Error HY000 HY000 Microsoft ODBC SQL Server Driver
  • 将 for 循环替换为 pyspark 中的并行进程

    我在脚本中使用 for 循环来为 size DF 数据帧 的每个元素调用函数 但这需要很多时间 我尝试通过地图删除 for 循环 但没有得到任何输出 size DF 是我从表中获取的大约 300 个元素的列表 用于 import call
  • 如何使用 Selenium Webdriver (Python) 在上下文菜单中选择“将图像另存为...”来保存图像

    我正在尝试使用 selenium webdriver 将特定图像保存到目录中 我希望通过模拟右键单击 img 元素并选择 将图像另存为 来实现此目的 使用以下代码我可以打开上下文菜单 但无法选择正确的选项 browser WebDriver
  • Learning_rate 不是合法参数

    我正在尝试通过实现 GridSearchCV 来测试我的模型 但我似乎无法在 GridSearch 中添加学习率和动量作为参数 每当我尝试通过添加这些代码来执行代码时 我都会收到错误 这是我创建的模型 def define model op
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 在Python中将罗马数字转换为整数

    根据 user2486 所说 这是我当前的代码 def romanMap map M 1000 CM 900 D 500 CD 400 C 100 XC 90 L 50 XL 40 X 10 IX 9 V 5 V 4 I 1 return
  • Java 相当于 Python 的 urllib.urlencode(基于 HashMap 的 UrlEncode)

    From https stackoverflow com questions 2018026 should i use urllib or urllib2 2018103 2018103 Java 中 Python 的 urllib url
  • 使用 Python 进行 Google 搜索网页抓取 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近为了工作中的一些项目 学习了很多python 目前我需要使用谷歌搜索结果进行一些网络抓取 我发现几
  • 将自定义属性添加到 Tk 小部件

    我的主要目标是向小部件添加隐藏标签或字符串之类的内容 以在其上保存简短信息 我想到创建一个新的自定义 Button 类 在本例中我需要按钮 它继承所有旧选项 这是代码 form tkinter import class NButton Bu

随机推荐

  • 根据 2D 索引替换 2D numpy 数组元素[重复]

    这个问题在这里已经有答案了 这个问题可能以前在某个地方被问过 但经过一番搜索后我找不到任何问题 因此在此发布 假设我有一个数组A和一个索引数组idx 暂时让两个数组都是二维的 import numpy as np A np array 3
  • JComponent大小问题

    我有一个JComponent我用来在屏幕上绘制形状的子类 在构造函数中 我试图设置ballX and ballY到一半X and Y的大小值JComponent 我认为我做错了 我现在查了很多资料 还是找不到解决办法 代码如下 请记住 这是
  • AngularJS - 从视图到控制器的 json 数据

    我从 xsl 翻译器获取 html 模板 json 数据 它是动态的 看起来像 html 代码加上字符串化 json 中的一些数据 问题是 我以什么方式将 json 字符串放入 html 代码中 以便控制器在 html 渲染之前捕获此 js
  • MVVM下WPF DataGridTemplateColumn可见性绑定

    我的 ViewModel 中有一个绑定到 ICollectionView 的 DataGrid DataGrid 位于 UserControl 内 该 UserControl 用于几种不同的数据场景 其中一些需要某些 DataGrid 列
  • 将背景图像居中对齐

    这是 HTML div class gallerybox a href CustomContentRetrieve aspx ID 398791 img alt src Utilities image jpg width 400 heigh
  • Delphi:使用参数时如何获取传递到服务器的查询

    我有一个带有 Devart TMSQuery SQL 内参数的查询 就像是 select from customers where customer CustomerID 在我做的代码中 Delphi sqlcustomer ParamBy
  • MongoDB 中的 geoNear 可以返回文档中字段的子集吗?

    当使用 geoNear 时 它返回所有字段 整个文档 它找到的对象 有什么方法可以将其限制为字段的子集吗 目前不支持这一点 唯一的解决方法是使用 near 并自己进行距离计算 dist sqrt dx dx dy dy
  • 如何查找 SQL Server 中所有数据库中所有表的列名

    我想找到所有表中的所有列名在所有数据库中 有没有一个查询可以为我做到这一点 尝试这个 select o name c name from sys columns c inner join sys objects o on c object
  • Microsoft Graph - 允许用户访问应用程序/服务主体

    我们正在向员工推出一个主要应用程序 它已设置为使用 Azure AD SSO 目前我们必须通过 Azure AD gt 应用程序 gt 用户手动设置每个用户才能访问该应用程序 我们有一个小型 C Web 应用程序 用于管理 AD 用户希望使
  • 使用 PushState 为 Backbone SPA 配置 Node Express

    我的 Express 应用程序有一个休息服务器和一个使用 Backbone 的 SPA 使用 history一切正常 即 Backbone history start If I do Backbone history start pushS
  • 使用 C# 写入 Excel

    我有一个基本的 WinForms 应用程序 并且希望能够将该应用程序中的数据写入 Excel 电子表格 到目前为止我有以下代码 Microsoft Office Interop Excel Application excelapp new
  • 自定义上传按钮

    嗨 我只是想知道如何创建自己的自定义文件上传按钮 因为我能做的最好的就是 我想要实现的是 如果有的话我会非常感激 请我提供解释如何使用代码执行此操作的答案 而不是包含允许您下载按钮或类似内容的网站链接的答案 谢谢 尽管其中一些答案会创建一些
  • 历史数据的非抽样报告自动化

    我们有一个客户每天收到 2 400 万次访问 因此我们只能获得未抽样的报告 因为它超出了谷歌的限制 对于尚未存储数据的特殊查询 最多 500 000 个会话 我们正在尝试收集 1 天期间的独立访客和访问次数 事实证明 当数据被采样时 使用
  • 给定 k 个已排序数组,从每个数组中选择一个元素,使得所选元素的最大元素和最小元素之差最小

    给定 k 个已排序数组 从每个数组中选择一个元素 使得所选元素的最大元素和最小元素之差最小 k 3 的示例 数组1 1 13 27 30 数组2 16 20 29 数组3 2 3 14 18 19 22 25 28 答 2 选定的元素 27
  • 将指针/引用作为参数传递给变量

    我知道这个问题已经被问过多次 是的 我做了一些研究 但我找不到适合我需求的解决方案 到目前为止我所做的 我正在构建一个函数 用于跟踪用户向下滚动页面的百分比并将其很好地显示在某个进度条中 这工作得很好 但是当我在 Chrome 上打开开发者
  • 如何让 OpenMP 在 MSVC 2015 上运行 clang

    我尝试让 clang 5 0 0 适用于 Visual Studio 2015 因为我需要 OpenMP 3 0 功能 我安装了clang编译器 不是没有任何openmp支持的vs2015版本 并使用cmake cmake minimum
  • 通过 javascript 更改页面比例

    我希望根据分辨率缩放网站主体 但代码似乎不起作用 document body style transform scale window screen availHeight 2 document body style o transform
  • 对动态表行进行编号

    我正在使用 jQuery 制作动态 HTML 表格 在表中 我的用户有两种交互 追加一行 删除特定行 对行进行编号的问题是 如果用户删除特定行 则该行后面的所有行都需要重新编号 我必须选择已删除行之后的所有行并将其行数减去 1 有更好的方法
  • 如何在 SQL Server 上启用 MSDTC?

    这甚至是一个有效的问题吗 我有一个使用 MSTDC 的 NET Windows 应用程序 它抛出异常 System Transactions TransactionManagerCommunicationException 分布式事务管理器
  • 为什么 elementtree.ElementTree.iterparse 使用这么多内存?

    我正在使用 elementtree ElementTree iterparse 来解析一个大的 371 MB xml 文件 我的代码基本上是这样的 outf open out txt w context iterparse copyrigh