これが、さまざまなことを検索して試した結果得られた解決策です。これがディレクトリ内のすべてのコンテンツを検索する方法よりも速いと言っているわけではありませんが、実際にははるかに速く結果が得られます(ディレクトリに1000個のファイルが含まれている場合に違いが見えます)
import os
import subprocess
from xml.sax.saxutils import quoteattr as xml_quoteattr
def DirAsLessXML(path):
result = '<dir type ={0} name={1} path={2}>\n'.format(xml_quoteattr('dir'),xml_quoteattr(os.path.basename(path)),xml_quoteattr(path))
list = subprocess.Popen(['find', path,'-maxdepth', '1', '-type', 'd'],stdout=subprocess.PIPE, shell=False).communicate()[0]
output_list = list.splitlines()
if len(output_list) == 1:
result = '<dir type ={0} name={1} path={2}>\n'.format(xml_quoteattr('leaf_dir'),xml_quoteattr(os.path.basename(path)),xml_quoteattr(path))
for item in output_list[1:]:
result += '\n'.join(' ' + line for line in DirAsLessXML(item).split('\n'))
result += '</dir>\n'
return result