2017-05-14 13 views
0

私はPythonでサブディレクトリの配列を作りたいと思っています。ここに私が得たいレイアウトとモデルのリストの例があります。Pythonでどのようにサブディレクトリの配列を作ることができますか?

       Root 
           | 
         directories 
          / \ 
         subdir_1... subdir_n 

したがって、すべてのサブディレクトリのリストを作成するプログラムを実行したいと思います。私が書くとしたらその方法:List_of_Subdirectoriesが追加されたディレクトリのリストをある

print(List_of_Subdirectories) 

。私はハードコードにリストにすべてのディレクトリた場合と同じ結果を達成したいと思い、本質的には

[subdir_1, subdir_2, ... , subdir_n] 

:私は出力を得るでしょう。たとえば、

List_of_Subdirectories = ["subdir_1", "subdir_2", ... , "subdir_n"] 

ここで、subdir_nは任意のn番目のディレクトリを示します。

は、スタックオーバーフローのここでの他の記事とは違って、私はタプルやパスなしでちょうどディレクトリ名を含むようにリストをしたいと思います。

+0

の可能性のある重複[Pythonでの即時のサブディレクトリのすべてを取得する方法](http://stackoverflow.com/questions/800197/how-to-get-all-of-the-immediate-subdirectories- in-python) –

+0

こんにちは@PeterWood、私はそのポストを見て、私はそれから欲しかった助けをかなり得ていない。 – segfault

答えて

1

あなたはだけのは、ディレクトリ名をしたい場合は、これを行うにはos.walkを使用することができます。

os.walk(ディレクトリ) は、各サブディレクトリのためのタプルを生成します。 3タプルの最初のエントリはディレクトリ名です。このようにディレクトリ名のリストを単に返す関数でこれをラップすることができます:

def list_paths(path): 
    directories = [x[1] for x in os.walk(path)] 
    non_empty_dirs = [x for x in directories if x] # filter out empty lists 
    return [item for subitem in non_empty_dirs for item in subitem] # flatten the list 

すべてのディレクトリを与える必要があります。

+0

タプルの取得を避ける方法はありますか?私はディレクトリ名だけのリストを持っていたいと思います。 L = ["dir1"、 "dir2"、 "dir3"、...など]のように自分自身で各ディレクトリ名をハードコードするのとまったく同じように動作します – segfault

+0

与えられたリストの理解は文字列のリストを生成します。与えられたパラメータがディレクトリパスであり、リストが返される関数でこれをラップすることはできますか? –

+0

@fwubb代わりに関数になるように私の答えを更新しました:) –

-1

あなたが望むすべてが指定されたディレクトリのサブディレクトリのリストである場合は、あなたが必要とするすべてはos.listdirとディレクトリだけを表示するためのフィルタです。

それは同じくらい簡単です:os.listdirからの戻り

List_of_Subdirectories = list(filter(os.path.isdir, os.listdir())) 
print(List_of_Subdirectories) 

(デフォルトまたは.)指定されたディレクトリ内のすべての利用可能な要素の名前を含むリスト、ディレクトリとファイルです。 os.path.isdirを使用してディレクトリのみをフィルタリングします。次に、listが必要なので、フィルタ処理された結果を明示的に変換します。

あなたはフィルタリングされた結果をprintすることはできませんが、あなたはそれを反復することができるだろう。下のスニペットは、avobeと同じ結果を達成します。

directory_elements = filter(os.path.isdir, os.listdir()) 
List_of_Subdirectories = [] 
for element in directory_elements: 
    List_of_Subdirectories.append(element) 
print(List_of_Subdirectories) 
+0

この回答は、パスのすべての子ではなく、指定されたレベルのディレクトリ名しか与えません。 –

+0

それはまさにその質問が求めていることです。少なくとも、私は何が書かれているのか理解しています。 –

+0

私は最初に私の質問にうんざりしていたので、おそらく私は編集する前に正しい質問に答えました。 – segfault

関連する問題