- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试迭代解析一个大型 (186MB) XML 文件。文件本身只是复杂的 MyNodeType 节点的列表。例如,
<MyNodeTypeList>
<MyNodeType>
...
</MyNodeType>
<MyNodeType>
...
</MyNodeType>
<MyNodeType>
...
</MyNodeType>
</MyNodeTypeList>
我试图通过迭代解析文件来保持较低的内存使用量,但它似乎在 30k 记录左右大幅减慢,并在 92k 处停止。即使使用如下所示的简单代码,该进程也会占用大约 2GB 的内存:
import xml.etree.cElementTree as ET
def main(argv):
it = ET.iterparse(argv[0])
count = 0
for (ev, el) in it:
if (ev == "end" and el.tag == "MyNodeType"):
count += 1
print count
if __name__ == "__main__":
main(sys.argv[1:])
有什么方法可以将处理代码的内存使用量保持在最低限度吗?
最佳答案
iterparse 的这种行为是 documented :
Note that iterparse still builds a tree, just like parse, but you can safely rearrange or remove parts of the tree while parsing
为了避免将整个树保留在内存中,请使用示例中提供的方法:
# get an iterable
context = iterparse(source, events=("start", "end"))
# turn it into an iterator
context = iter(context)
# get the root element
event, root = context.next()
for event, elem in context:
if event == "end" and elem.tag == "record":
... process record elements ...
root.clear()
关于Python cElementTree 使用 2GB RAM 迭代解析大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13142854/
我正在使用 cElementTree Python 中的模块来获取 XML 的文本子项树,使用 text属性(property)。但它似乎只适用于直接文本子项(见下文)。 $ python ... >
对于 xml data1 data2 我需要包含父元素元组的列表,xml 中每个父元素的数据。 有没有办法使用 cElementTree 做到这一点?我
我有一个小的 xml 解析 python 片段,它适用于 ElementTree,但不适用于 cElementTree。这是为什么? #!/usr/bin/python3 import sys imp
我的任务是用 Python 重新编写一些旧的 XML 解析代码,我偶然发现了 cElementTree 带来的乐趣,我喜欢它,因为我可以用很少的几行代码做很多事情。 我对 xpath 的经验水平并不广
对dom略有了解,想了解一下ElementTree。 Python 2.6 的 ElementTree 实现稍旧,但仍然可用。但是,它看起来像是带有两个不同的类:xml.etree.ElementTr
cElementTree 是 XML API ElementTree 的快速 C 实现。在 python 2 中,您将显式加载它(将其别名为 ElementTree),但在 the Python 3
有没有办法使用 cElementTree 查找 xml 树中的所有节点? findall 方法仅适用于指定的标签。 最佳答案 您可以使用XPath paths关于 findall 方法: The 1.
我正在尝试迭代解析一个大型 (186MB) XML 文件。文件本身只是复杂的 MyNodeType 节点的列表。例如, ... ...
我正在使用 cElementTree 来解析 xml 文件。使用 .getroot() 函数给出一个元素类型作为结果。我想在 if 语句中使用这种类型 if type(elementVariable)
我正在使用 python 脚本和 cElementTree 包在 linux ubuntu 机器上解析 xml 文件。一段时间后(每次都在同一点)导致错误 Segmentation fault (co
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我在使用 python 解析 XML 文件时遇到问题,即 - 语法。 我的 XML 文件如下所示: dzisiaj dzisiajadv:pos
我曾尝试使用此问题的答案,但无法使其工作:How to create "virtual root" with Python's ElementTree? 这是我的代码: import xml.etre
我的 XML 解析函数的简化版本在这里: import xml.etree.cElementTree as ET def analyze(xml): it = ET.iterparse(fil
我从可能包含未经处理的用户贡献内容的外部来源接收到 xml 字符串。 以下 xml 字符串在 cElementTree 中给出了 ParseError: >>> print repr(s) 'dddd
尝试使用 urllib 和 cElementTree 在网络上抓取此 xml 文件。我正在使用 Google App Engine,但我认为该问题与我的平台无关。 这是我的错误: : not well
我在 Visual Studio 2015 中编写 Python 代码,这在过去几天运行良好,但是今天早上我决定将解决方案和目录移动到我的 Windows 机器上 GitHub 监控的目录中。自从我移
我写了一个 python 脚本来解析一个 xml 文件。我从 C# 项目调用此文件。但是在运行程序时出现错误:没有名为 xml.etree.cElementTree 的模块。 Program.cs -
我正在使用 cElementTree 库在 Python 中解析 XML 文件。一切正常 但当 XML 中的值不正确时,我想为用户提供完整的错误消息。 例如,假设我有以下 XML: 并希望在 hre
我是一名优秀的程序员,十分优秀!