问题标签 [celementtree]

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 回答
1113 浏览

python - ElementTree iterparse 需要多长时间?

在回答另一个问题时,有人向我展示了以下教程,其中作者声称已使用 iterparse 在 3 秒内解析约 100 MB 的 XML 文件:

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

我正在尝试解析一个 ~90 MB XML 文件,并且我有以下代码:

这大约需要 30 秒……甚至与我使用类似大小的文件、类似的算法和相同的包阅读的教程中报告的数量级不同。

有人可以告诉我我的代码可能有什么问题,或者我的情况和本教程之间可能没有注意到哪些差异?

我正在使用 Python 2.7.3。

附录:

我也在使用一台相当强大的机器,以防有人认为可能是它。

0 投票
1 回答
1571 浏览

python - 为 cElementTree 指定换行符

代码

我正在用 cElementTree 编写一个 xml 文件,如下所示:


实际结果

这给出了以下文件(在 Windows 上):

所以缺少换行符。

我尝试“手动”添加适当的 Windows 换行符\r\n,现在我得到了:


期望的结果

但是,我希望在每一行之后都有正确的换行符,这样我的输出应该如下所示:

我怎样才能做到这一点?

0 投票
0 回答
69 浏览

python - 使用 ElementTree 或 cElementTree 时命名空间复杂化

0 投票
2 回答
1675 浏览

python - 无法从 Python 中的 subprocess.Popen 输出解析 xml

我正在使用这个库来解析我的 xml:

解析器的 xml 输入是以下输出subprocess.Popen

我收到此错误:

但是,当我传递从与xml_command文件相同的命令生成的 xml 时,它工作得非常好:

0 投票
2 回答
2568 浏览

python - 如何使用 Python 的 ElementTree 遍历所有 XML 元素并将逻辑应用于每个元素的值

我目前正在尝试将逻辑应用于 XML 文件中的元素值。具体来说,我试图将所有值编码为 UTF-8,同时不触及任何元素名称/属性本身。

这是示例 XML:

目前我已经尝试了 3 种方法来实现这一点,但没有成功:

首先,我尝试循环遍历每个元素,使用 .text 检索值并使用 .parse:

这会导致 XML 文件没有正确更改文本 \311,它只是保持原样。

接下来我用 cElementTree 尝试了 .iterparse 无济于事:

这导致:

不知道我在那里做错了什么,我已经看到了多个具有相同排列的示例,但是当我通过没有 .text 的元素打印时,我看到开头字符串值为“end”的元组,我认为那是导致此方法出现问题。

如何正确迭代我的元素,并且不指定元素名称,例如 .findall(),将逻辑应用于每个元素中包含的值,以便当我将 xml 写入文件时,它会保存程序迭代时所做的更改元素值?

0 投票
2 回答
227 浏览

python - XML 元素中的 Python 搜索数据

我认为这将适用于搜索“错误”的标签值

我遇到以下错误:

“需要超过 0 个值才能解包”是什么意思?

0 投票
0 回答
713 浏览

python - Python中最快的SAX解析方法

我有一个 XML 文档 (1.5MB),需要针对我正在开发的 Web 服务进行实时解析。我正在使用 cElementTree Python 库,根据这篇文章,它是在 Python 中解析 XML 的首选方法,但我不确定这是否真的是最快的方法。

我想提高解析性能并最小化服务器上​​的内存使用量,目前正在使用ET.iterparse()测试 SAX 方法。我的基准测试显示了纯解析同一个 XML 文档 200 次的以下结果。

  • 带有 ET.XML() 的 DOM 20.5
  • 带有 ET.iterparse() 的 SAX 32.4

这相当于每个 XML 文档的 DOM大约102毫秒,而SAX大约 162 毫秒。

但是,我仍然希望从 SAX 方法中挤出更多性能以匹配 102 毫秒的 DOM,或者可能更快,因为性能和内存在我的应用程序中都很重要。

我正在使用一种常见的 SAX 解析方法,如下面的代码:

0 投票
2 回答
336 浏览

python - 在 Applescript 中使用 cElementTree 解析 XML 时出现 UnicodeEncodeError

抱歉,如果这是重复的或非常明显的东西,但请多多包涵,因为我是 Python 新手。我正在尝试使用 cElementTree (Python 2.7.5) 来解析 Applescript 中的 XML 文件。XML 文件包含一些非 ASCII 文本编码为实体的字段,例如<foo>caf&#233;</foo>.

在终端中运行以下基本代码会按预期输出成对的标签和标签内容:

但是当我在 Applescript 中使用 运行相同的代码时do shell script,我得到了可怕的UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 10: ordinal not in range(128)

我发现如果我将print线路更改为

然后我确实得到了一个包含在 [''] 中的 XML 标记/值对的字符串,但是任何非 ASCII 字符都会作为文字 Unicode 字符串传递到 Applescript(所以我以 结尾u'caf\\xe9')。

我尝试了几件事,包括 a.) 将 .xml 文件读入字符串并使用 .fromstring 而不是 .parse,b.) 尝试将 .xml 文件转换为 str,然后再将其导入 cElementTree,c.) 只是在任何我能找到的地方粘贴 .encode 以查看是否可以避免使用 ASCII 编解码器,但还没有解决方案。不幸的是,我被困在使用 Applescript 作为容器。提前感谢您的建议!

0 投票
1 回答
209 浏览

python - 抑制 cElementTree 中的命名空间前缀

在 python 2.6 中,我需要抑制命名空间前缀。我使用了此处发布的解决方案并且它可以工作,但是,当我使用 cElementTree 来进行更快的解析时,它会中断。从我的日志中:

两种实现之间是否存在一些潜在的差异?还有另一种解决方法吗?我拥有的模块版本:

谢谢!

0 投票
2 回答
196 浏览

python - 有没有更好的方法在 xml.etree.ElementTree 中让元素了解他们的父母和 xpath

我有以下有效的代码:

这导致此输出:

现在这与原始代码发生了巨大的变化,但我不允许分享它。

这些功能并不太低效,但是从 cElementTree 切换到 ElementTree 时性能会急剧下降,这是我所期望的,但从我的实验来看,猴子修补 cElementTree 似乎是不可能的,所以我不得不切换。

我需要知道的是是否有一种方法可以向 cElementTree 添加方法,或者是否有更有效的方法来执行此操作,以便我可以恢复一些性能。

只是为了让您知道,我正在考虑作为最后的手段来实现选定的静态类型并使用 cython 进行编译,但由于某些原因,我真的不想这样做。

谢谢参观。

编辑:很抱歉错误地使用了术语后期绑定。有时我的词汇量有待改进。我的意思是“猴子补丁”。

编辑:@Corley Brigman,Guy:非常感谢您的回答确实解决了这个问题,但是(我应该在原始帖子中说明这一点)我在使用 lxml 之前完成了这个项目,这是一个很棒的库,可以进行编码轻而易举,但由于新的要求(这需要作为名为 Splunk 的产品的插件来实现),这将我与 Splunk 附带的 python 2.7 解释器联系在一起,并消除了添加第三方库的可能性,但 django 除外。