1

Forfunというメイン ディレクトリが 1 つあります。このディレクトリ内には、Test1Test2Test3などの 7 ~ 8 個のサブディレクトリがあります。Forfunにも、サブディレクトリではないファイルがいくつかあることに注意してください。たとえば、Forfun内の Test1、Test2 サブディレクトリと同じレベルに .txt ファイルがあります。

すべてのTestXサブディレクトリは、さらに 3 つのサブディレクトリ、つまり、inputsresults、およびparametersに分割されます。

inputのような特定のフォルダーのすべてのインスタンスを一覧表示できるようにしたい。

コードは、Forfunディレクトリ全体を再帰的に通過し、入力または結果ディレクトリが見つかったすべての場所を一覧表示する必要があります。

私はos.listdirこのように使用してみました:

path = '/myfiles/Forfun'
folders = [f for f in os.listdir(path) if f.endswith('inputs')]
folders 

しかし、これは空のリストを返します。問題を明確に説明したいと思います。助けてくれてありがとう。

4

2 に答える 2

3

os.listdir()指定されたディレクトリ内のすべてのファイルとディレクトリを一覧表示します。あなたが経験したように、それは再帰を実行しません。最初に提供されたディレクトリのレベルにとどまります。

ディレクトリ ツリーを再帰的に調べ、特定のディレクトリ レベルより下のすべてのos.walk()ファイルとディレクトリを反復処理するには、Python の を使用する必要があります。

import os

def listdirs(suffix):
    for dirname, dirnames, filenames in os.walk('.'):
        for subdirname in dirnames:
            subdirpath = os.path.join(dirname, subdirname)
            if subdirpath.endswith(suffix):
                yield subdirpath


if __name__ == "__main__":
    for d in listdirs('inputs'):
        print d

あなたが提案したのと同じディレクトリ構造をセットアップしました。上記のコードの出力は次のとおりです。

$ python test.py 
./Test1/inputs
./Test2/inputs
于 2012-05-21T12:30:17.103 に答える
1

Jan-Philipのソリューションを少し正確にするには:

>>> import os
>>> for root, dirs, files in os.walk(path):
    if 'inputs' in dirs:
        print os.path.join(root, 'inputs')

inputsこれにより、サブフォルダーのすべての出現が一覧表示されます。

于 2012-05-21T12:37:17.020 に答える