【问题标题】:Using cElementTree in python 3在 python 3 中使用 cElementTree
【发布时间】:2015-08-14 00:37:36
【问题描述】:

cElementTree 是 XML API ElementTree 的快速 C 实现。在 python 2 中,您将显式加载它(将其别名为 ElementTree),但在 the Python 3 docs 中,我读到了这个:

在 3.3 版中已更改: 此模块将在可用时使用快速实现。 xml.etree.cElementTree 模块已弃用。

确实,xml.etree.cElementTree.py 现在只是从xml.etree.ElementTree 导入。问题:如何获得“快速实施”?我如何判断它是否“可用”,如果由于某种原因它没有随 python 分发,我从哪里得到它?

在我的程序中对ElementTree 的自省表明我正在获取python 版本。在ElementTree.py 中,我没有发现C 版本的任何挂钩。它何时以及如何发挥作用? ElementTree 文档没有提供任何线索,也没有在 google 和 stackoverflow 上进行快速搜索。

【问题讨论】:

    标签: python xml python-3.x elementtree celementtree


    【解决方案1】:

    来自“What's New in Python 3.3”文档:

    xml.etree.ElementTree 模块现在默认导入其 C 加速器;不再需要显式导入 xml.etree.cElementTree(此模块保留是为了向后兼容,但现在已弃用)。此外,Element 的 iter 系列方法已经过优化(用 C 重写)。该模块的文档也通过添加示例和更详细的参考得到了极大的改进。

    虽然看起来好像没有发生,但导入是静默进行的。您会在ElelementTree.py 中找到一段代码,内容为

    # Import the C accelerators
    try:
        # Element, SubElement, ParseError, TreeBuilder, XMLParser
        from _elementtree import *
    except ImportError:
        pass
    else:
        # Overwrite 'ElementTree.parse' and 'iterparse' to use the C XMLParser
    
        class ElementTree(ElementTree):
           ...
    

    似乎没有一种简单的方法来验证 C 模块是否正在被导入,但我认为您可以接受它。如果您真的很担心(我个人不会),那么您可以在其中修补 print 进行检查。

    【讨论】:

    • 是的,这也是我引用的ElementTree 文档所说的......除了“只要可用”部分。既然看起来没有发生,我该如何检查?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多