问题标签 [iterparse]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
134 浏览

python - xml 解析无法正常工作

我有一个结构如下的 XML 文件

我使用 iterparser 进行解析。但它没有正确打印数据。我在这里添加代码。

从 xml.etree.ElementTree 导入 iterparse,转储

我的预期输出:

输出得到

0 投票
1 回答
1547 浏览

python - xml.etree.ElementTree iterparse() 仍然使用大量内存?

我一直在尝试使用 iterparse 来减少需要处理大型 XML 文档的脚本的内存占用。这是一个例子。我编写了这个简单的脚本来读取 TMX 文件并将其拆分为一个或多个输出文件,以不超过用户指定的大小。尽管使用了 iterparse,但当我将 886MB 文件拆分为 100MB 文件时,脚本会耗尽所有可用内存(在使用 8MB 中的 6.5 时爬行)。

难道我做错了什么?为什么内存使用率会这么高?

0 投票
0 回答
337 浏览

python - Iterparse 截断 XML 元素

我有一个大型 XML 文件(大约 600 MB),我正在尝试使用带有 iterparse 的 cElementTree 进行解析。第一次尝试这个。

在处理每个产品后,我正在迭代“产品”标签和elem.clear()-ing。在我的解析中,我有一个函数parse_trips,它使用 for 循环来解析<trip>标签中的<trips>标签(每个产品可能有数百个这些标签,每一个都有数百行长)。

但是,当我dump(trips)看到这些标签被提前截断/关闭而没有抛出任何错误时。解析器似乎达到了内存中 elem 的最大长度,然后就不再持有了。

原始xml:

我得到的输出是虽然可能有 6 个这样的组,但当我到达组中的第二次旅行时,dump(trip)看起来像这样:

以后的每一次旅行都消失了。我尝试循环并仅增加一个整数i来计算有多少<trip>标签,它只到达它截断的第二个标签,然后结束 for 循环。

有没有办法查看/配置iterparse可以抓取的元素的大小?或者iter一旦我去旅行以获取所有子节点时再次使用的方法<trips>

0 投票
2 回答
1386 浏览

python - iterparse 没有得到子文本

编辑:我找到了一种让它工作的方法。原来我有一个elem.clear()电话,我没有在下面的代码中显示。我为此道歉。我修改了它,所以你可以看到它是怎样的。事实证明,如果我将该调用移到 if 语句中,问题就消失了。但我仍然不明白在 if 语句完成之前如何调用 clear 。

我有一个看起来像这样的 XML 文件:

我知道它没有正确的样式,但这就是我的脚本接收它的方式,所以我想给你们提供全貌。<alarm>该文件基本上在一个元素下有数百个<root>元素。

我想要做的是用 iterparse 解析文件并从<alarm>. 到目前为止,我的脚本如下所示:

但我Nonechild.text. 这是我运行脚本时得到的输出:

你们能帮我解决这个问题吗?

0 投票
1 回答
630 浏览

xml - 使用 iterparse 的 XML 解析器“丢失”子级

感谢您在以下方面的帮助:我需要读取一个大型 XML 文件并将其转换为 CSV。

我有两个函数应该做同样的事情,只有一个(function1)使用 iterparse(因为我需要处理大约 2GB 的文件)和另一个不使用(function2)。

Function2 对于相同的 XML 文件(但最大 150 MB)工作得非常好,但在该大小之后,它会因内存而失败。

我遇到的问题是,尽管代码(对于 function1)没有给出错误,但它会丢失一些孩子(这是一个大问题!)。另一方面,Function2 读取所有子项,并且不会“松动”或失败。

问:你能在function1的代码中看到一些孩子会丢失(或阅读不正确,或被忽略)的原因吗?

注意 1:我准备好发送一个 50 KB 的 XML 示例,以备不时之需。
注2:变量“nchil_count”只是为了计算孩子的数量。

代码(功能1):

代码(功能2):

0 投票
2 回答
1973 浏览

python - 尽管清除,lxml iterparse 仍会填充内存

我正在尝试解析 xml。第一个 iterparse 工作正常,但第二个开始填充内存。如果删除第一个 iterparse,则没有任何变化。XML 是有效的。

XML:

0 投票
2 回答
4781 浏览

python - iterparse 抛出“找不到元素:第 1 行,第 0 列”,我不知道为什么

我有一个网络应用程序(使用 Twisted),它通过 Internet 接收 xml 块(因为整个 xml 可能不会在一个数据包中完整地出现)。我的想法是慢慢构建收到的 xml 消息。我已经“解决”了来自 ​​xml.etree.ElementTree 的 iterparse。我一直在涉足一些代码,以下(非 Twisted 代码)工作正常:

然后我构建了以下代码来模拟我端如何接收数据:

但是代码吐了出来:

'未找到元素:第 1 行,第 0 列'

我无法绕过它。当第二个示例中的 stringIO 与第一个代码示例中的 stringIO 内容相同时,为什么会发生该错误?

ps:

  1. 我知道我不是第一个提出这个问题的人,但没有其他线程回答我的问题。如果我错了,请提供适当的线程。
  2. 如果您对使用其他模块有建议,请不要将它们放在答案中。添加评论。

谢谢

0 投票
1 回答
1802 浏览

python - python元素树iterparse过滤器节点和子项

我正在尝试使用 elementTree 的 iterparse 函数根据文本过滤节点并将它们写入新文件。我使用 iterparse 因为输入文件很大(100+ MB)

输入.xml

预期输出(文本中包含“电影”或“电影”的所有页面)

当前代码

如何添加正则表达式以根据页面的文本属性进行过滤?

0 投票
1 回答
1387 浏览

python - Python:如何更新 xml 并保存到一个新的 xml 文件,使用 iterparse 方法读取和更新?

我可以将它打印到控制台,这是我想要的方式,但我似乎无法掌握如何保存它。示例中的 XML 不会更改。我正在使用相当大的 XML 文件和 iterparse 函数,因为我认为这很重要。

我的代码:

0 投票
1 回答
4480 浏览

python - Iterparse 对象下一个没有属性

我正在解析一个 700mb 的文件,我有以下代码在我的测试文件上运行良好,没有行 context.iter(context) 和 event,elem = context.next()。

但是,当我继续 iterparse 700mb 文件时,它仍然崩溃。读过:

在清除()树时使用 ElementTree.iterparse() 是否应该增加内存使用量?

我相信这是因为我需要清除根目录,但是按照我在上面合并的一些教程后,我不断收到错误消息:

我对 Python 还是很陌生,我无法弄清楚为什么会发生这种情况,据我所知,我与示例一致。