答えは、検索結果をどうするかによって異なります。XML パーサーを使用しないことを検討する必要がある唯一のケースは、XML 文書の構造をあまり気にしない場合です。
この場合、3 つすべてのタイミングを試すことができますが、ツリーを構築する必要はなく、部分文字列検索と競合するのに時間がかかりすぎる可能性があります。
3 つすべての時間を計って、問題の典型的なファイルの違いを確認してください。たとえば、小さなサンプル ファイルでは次のようになります。
$ python -m timeit "any('tygervalley' in line for line in open('t.xml'))"
100000 loops, best of 3: 14.6 usec per loop
$ python -m timeit "import re" "for line in open('t.xml'):" " re.findall('tygervalley', line)"
10000 loops, best of 3: 27.4 usec per loop
$ python -m timeit "from lxml.etree import parse" "tree = parse('t.xml')" "tree.xpath('//*[text()=\'tygervalley\']')"
10000 loops, best of 3: 133 usec per loop
呼び出す実際のメソッドをいじることができます。常に選択肢があります。
編集: 100 倍長いファイルで状況がどのように変化するかに注意してください:
$ python -m timeit "any('tygervalley' in line for line in open('t.xml'))"
100000 loops, best of 3: 20.8 usec per loop
$ python -m timeit "import re" "for line in open('t.xml'):" " re.findall('tygervalley', line)"
1000 loops, best of 3: 252 usec per loop
$ python -m timeit "from lxml.etree import parse" "tree = parse('t.xml')" "tree.xpath('//*[text()=\'tygervalley\']')"
1000 loops, best of 3: 1.34 msec per loop
結果の解釈には注意してください:)