4

特定のディレクトリ内のすべてのディレクトリ/サブディレクトリをリストする xml 構造を取得するのが困難です。特定の投稿で再帰を使用して動作するようになりました私の問題は通常より少し難しいです。10000 個のファイルが含まれている可能性のあるディレクトリがあるため、すべてのコンテンツをチェックしてディレクトリかどうかを確認するとコストがかかり、xml の構築に時間がかかります。ディレクトリのみのxmlを構築したい。

Linux には find のようなコマンドがあることは知っています。-タイプ d存在するディレクトリをリストします(ファイルではありません)。Pythonでこれを達成するにはどうすればよいですか。

前もって感謝します。

4

3 に答える 3

2

たった1つのディレクトリの場合...

import os

def get_dirs(p):
  p = os.path.abspath(p)
  return [n for n in os.listdir(p) if os.path.isdir(os.path.join(p, n))]

print "\n".join(get_dirs("."))
于 2012-09-27T16:03:17.043 に答える
0

これが、さまざまなことを検索して試した結果得られた解決策です。これがディレクトリ内のすべてのコンテンツを検索する方法よりも速いと言っているわけではありませんが、実際にははるかに速く結果が得られます(ディレクトリに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
于 2012-09-27T18:17:24.707 に答える