2011-12-19 15 views
1

を維持し、私がニシキヘビを使用しようとしていますが、任意のディレクトリ構造からファイルをグロブするos.walk:パイソン:os.walk()階層

matches = [] 
for root, dirnames, filenames in os.walk(path): 
    for filename in fnmatch.filter(filenames, name): 
     matches.append(os.path.join(root, filename)) 

print matches 

これはうまくすべてのファイルをグロブが、私はしたいのですがまた、実際のフォルダ構造を維持することができます。つまり、サブフォルダをサブフォルダに移動したいので、実際にどのファイルがどのサブフォルダに属しているかを知ることができます。それはos.walkで可能ですか、私自身の機能をロールバックする必要がありますか?

私の疑問を明確にするために、私はパースするディレクトリのプログラム内部ツリーを作成したいので、実際にディレクトリツリーを再帰的に解析して各サブディレクトリとファイルを一度に見つけます。 :

擬似コード:

def createAndParseSubDir(path): 
    ret = [] 
    files = glob(path) 
    for file in files: 
     if isDir(file): 
      ret.append(createAndParseSubDir(file)) 
     else: 
      ret.append(file) 

    return ret 

hierarchy = createAndParseSubDir(myRoot) 

EDIT: 私は、ファイル/ディレクトリがやり方のようなツリーに解析されることを保証するために、上記の擬似コードのような同様の再帰関数を使用して終了。

+0

[この質問に答える] [1]はこの特定の問題を解決しました。 [1]:http://stackoverflow.com/questions/2909975/python-list-directory-subdirectory-and-files私はフォルダ名を持っていることを知っている –

答えて

0

あなたは既にこの情報を持っている、あなたはそれを使用していない:

for root, dirnames, filenames in os.walk(path): 
    # current folder: root 
    # list of filenames in that folder: filenames 
    # list of subdirectories in that folder: dirnames 
    for filename in fnmatch.filter(filenames, name): 
     matches.append(os.path.join(root, filename)) 
     #   current folder ----^  ^----- current file 
+0

は、それが歩行順序の詳細です。基本的に私は道を望むだけでなく、それから自分の木を作りたいと思っています。 – moka

0

は、あなたの代わりに、リストの辞書に保存することができますように。これを試して、あなたの請求書に合っているかどうかを確認してください。

matches = {} 
for root, dirnames, filenames in os.walk(path): 
    for filename in fnmatch.filter(filenames, name): 
     matches.setdefault(root,[]).append(os.path.join(root, filename))