问题标签 [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.
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。
附录:
我也在使用一台相当强大的机器,以防有人认为可能是它。
python - 为 cElementTree 指定换行符
代码
我正在用 cElementTree 编写一个 xml 文件,如下所示:
实际结果
这给出了以下文件(在 Windows 上):
所以缺少换行符。
我尝试“手动”添加适当的 Windows 换行符\r\n
,现在我得到了:
期望的结果
但是,我希望在每一行之后都有正确的换行符,这样我的输出应该如下所示:
我怎样才能做到这一点?
python - 无法从 Python 中的 subprocess.Popen 输出解析 xml
我正在使用这个库来解析我的 xml:
解析器的 xml 输入是以下输出subprocess.Popen
:
我收到此错误:
但是,当我传递从与xml_command
文件相同的命令生成的 xml 时,它工作得非常好:
python - 如何使用 Python 的 ElementTree 遍历所有 XML 元素并将逻辑应用于每个元素的值
我目前正在尝试将逻辑应用于 XML 文件中的元素值。具体来说,我试图将所有值编码为 UTF-8,同时不触及任何元素名称/属性本身。
这是示例 XML:
目前我已经尝试了 3 种方法来实现这一点,但没有成功:
首先,我尝试循环遍历每个元素,使用 .text 检索值并使用 .parse:
这会导致 XML 文件没有正确更改文本 \311,它只是保持原样。
接下来我用 cElementTree 尝试了 .iterparse 无济于事:
这导致:
不知道我在那里做错了什么,我已经看到了多个具有相同排列的示例,但是当我通过没有 .text 的元素打印时,我看到开头字符串值为“end”的元组,我认为那是导致此方法出现问题。
如何正确迭代我的元素,并且不指定元素名称,例如 .findall(),将逻辑应用于每个元素中包含的值,以便当我将 xml 写入文件时,它会保存程序迭代时所做的更改元素值?
python - XML 元素中的 Python 搜索数据
我认为这将适用于搜索“错误”的标签值
我遇到以下错误:
“需要超过 0 个值才能解包”是什么意思?
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 解析方法,如下面的代码:
python - 在 Applescript 中使用 cElementTree 解析 XML 时出现 UnicodeEncodeError
抱歉,如果这是重复的或非常明显的东西,但请多多包涵,因为我是 Python 新手。我正在尝试使用 cElementTree (Python 2.7.5) 来解析 Applescript 中的 XML 文件。XML 文件包含一些非 ASCII 文本编码为实体的字段,例如<foo>café</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 作为容器。提前感谢您的建议!
python - 抑制 cElementTree 中的命名空间前缀
在 python 2.6 中,我需要抑制命名空间前缀。我使用了此处发布的解决方案并且它可以工作,但是,当我使用 cElementTree 来进行更快的解析时,它会中断。从我的日志中:
两种实现之间是否存在一些潜在的差异?还有另一种解决方法吗?我拥有的模块版本:
谢谢!
python - 有没有更好的方法在 xml.etree.ElementTree 中让元素了解他们的父母和 xpath
我有以下有效的代码:
这导致此输出:
现在这与原始代码发生了巨大的变化,但我不允许分享它。
这些功能并不太低效,但是从 cElementTree 切换到 ElementTree 时性能会急剧下降,这是我所期望的,但从我的实验来看,猴子修补 cElementTree 似乎是不可能的,所以我不得不切换。
我需要知道的是是否有一种方法可以向 cElementTree 添加方法,或者是否有更有效的方法来执行此操作,以便我可以恢复一些性能。
只是为了让您知道,我正在考虑作为最后的手段来实现选定的静态类型并使用 cython 进行编译,但由于某些原因,我真的不想这样做。
谢谢参观。
编辑:很抱歉错误地使用了术语后期绑定。有时我的词汇量有待改进。我的意思是“猴子补丁”。
编辑:@Corley Brigman,Guy:非常感谢您的回答确实解决了这个问题,但是(我应该在原始帖子中说明这一点)我在使用 lxml 之前完成了这个项目,这是一个很棒的库,可以进行编码轻而易举,但由于新的要求(这需要作为名为 Splunk 的产品的插件来实现),这将我与 Splunk 附带的 python 2.7 解释器联系在一起,并消除了添加第三方库的可能性,但 django 除外。