cElementtree和ElementTree有什么不同?

30
我了解一些DOM,并希望学习ElementTree。Python 2.6有一个相对较旧的ElementTree实现,但仍可用。然而,它似乎带有两个不同的类:xml.etree.ElementTree和xml.etree.cElementTree。请问有人能友情说明它们的区别吗?谢谢。

3
顺便提一下,你可能会对lxml.etree感兴趣;虽然它是第三方模块,但它是ElementTree规范的超集,并包括实际的XPath支持等有用功能。 - Charles Duffy
5个回答

32

这是同一个库(相同的API、相同的功能),但ElementTree是用Python实现的,而cElementTree是用C实现的。

如果可以的话,请使用C实现,因为它针对快速解析和低内存使用进行了优化,比Python实现快15-20倍。

如果您在受限环境中(不允许加载C库),则使用Python版本。


1
有一些微妙的差别。在cElementTree中,findtext方法没有default参数(在Python 2.7.13中看到)。不过这可以很容易地用findtext("...") or "defaultValue"替换。 - Florian Winter
我认为不使用cElementTree的主要原因(可以说是唯一的原因)是在给定平台(芯片组/操作系统组合)上没有可用的二进制文件。例如,ElementTree可能在支持Python的小众平台上直接运行良好,但该平台上可能没有可用的cElementTree二进制文件。这方面的一些内容可以在此处提到:https://packaging.python.org/guides/packaging-binary-extensions/#disadvantages。 - akhan

21

但现在它们是同一件事 Python 3.3以后,在github源代码cElementTree

# cElementTree.py

from xml.etree.ElementTree import *

这只是为了向后兼容


18

4
这应该能够澄清混淆。谢谢你的回答。 - Hai Vu

6

来自http://effbot.org/zone/celementtree.htm

cElementTree模块是ElementTree API的C实现,经过优化以实现快速解析和低内存使用。在典型文档上,cElementTree比ElementTree的Python版本快15-20倍,并且使用的内存量少2-5倍。


5

ElementTree是用Python实现的,而cElementTree是用C实现的。因此,cElementTree速度更快,但在没有访问C的情况下不可用,例如在Jython或IronPython或Google App Engine中。

从功能上来说,它们应该是等效的。


1
参考:http://docs.python.org/library/xml.etree.elementtree.html。 "这个API的C实现可作为xml.etree.cElementTree使用。" - S.Lott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接