2010-02-28 12 views
13

Conosco un po 'di dom e vorrei conoscere ElementTree. Python 2.6 ha un'implementazione un po 'più vecchia di ElementTree, ma ancora utilizzabile. Tuttavia, sembra che venga fornito con due classi diverse: xml.etree.ElementTree e xml.etree.cElementTree. Qualcuno potrebbe essere così gentile da illuminarmi con le loro differenze? Grazie.Quali sono le differenze tra cElementtree e ElementTree?

+2

Come parte, potresti trovare lxml.etree interessante; mentre è un modulo di terze parti, questo è un superset della specifica ElementTree e include funzionalità utili come il supporto reale XPath. –

risposta

24

È la stessa libreria (stessa API, stesse caratteristiche) ma ElementTree è implementato in Python e cElementTree è implementato in C.

Se è possibile, utilizzare l'implementazione C perché è ottimizzato per l'analisi rapida e l'utilizzo di memoria insufficiente ed è 15-20 volte più veloce dell'implementazione Python.

Utilizzare la versione Python se ci si trova in un ambiente limitato (caricamento della libreria C non consentito).

+0

Ci sono alcune sottili differenze. In cElementTree, il metodo 'findtext' non aveva un parametro' default' (visto con Python 2.7.13). Questo può essere facilmente sostituito con 'findtext (" ... ") o" defaultValue "', comunque. –

6

Da http://effbot.org/zone/celementtree.htm:

Il modulo cElementTree è un'implementazione C dell'API ElementTree, ottimizzato per l'analisi veloce e l'uso di memoria insufficiente. Su documenti tipici, cElementTree è 15-20 volte più veloce della versione Python di elementtree, e utilizza 2-5 volte meno memoria

4

ElementTree è implementato in Python, mentre cElementTree è implementato in C. Così cElementTree sarà più veloce, ma anche non disponibile dove non si ha accesso a C, come ad esempio in Jython o IronPython o su Google App Engine.

Funzionalmente, dovrebbero essere equivalenti.

+1

Riferimento: http://docs.python.org/library/xml.etree.elementtree.html. "Un'implementazione C di questa API è disponibile come xml.etree.cElementTree. " –

Problemi correlati