1

自家製のパスナビゲーション機能を機能させようとしています。基本的には、1つのフォルダーを調べて、その中のすべてのフォルダーを調べ、各フォルダー内で関数を実行する必要があります。

forループ内のディレクトリを変更しようとすると問題が発生します。私はこの「findDirectories」関数を持っています:

def findDirectories(list):
    for files in os.listdir("."):
        print (files)
        list.append(files)
        os.chdir("y")

その最後の行が問題を引き起こします。それを削除すると、関数はそのフォルダー内のすべてのフォルダーを含むリストをコンパイルするだけです。残念ながら、これは、フォルダを移動するたびにこれを実行する必要があることを意味します。すべてを一度だけ実行することはできません。フォルダ「y」を実際のフォルダとして指定しましたが、それでもプログラムを開くとクラッシュします。forループの外でos.chdir( "y")を実行しても、まったく問題はありません。

私はPythonは初めてですが、プログラミング全般は初めてです。どうすればこれを機能させることができますか、それとももっと良い方法がありますか?私が必要とする最終的な結果は、このフォルダー内に存在する単一の「* Response.xml」ファイルごとに、それがどれほど深くネストされていても、関数を実行することです。

4

2 に答える 2

2

実際のエラーのトレースバックは投稿しませんがy、相対パスとして指定したように機能しないことは明らかです。

したがって、ループの最初の反復でに変更できる可能性がありますが、2番目の反復では、そのサブディレクトリy変更しようとします。これも呼び出されます。yy

あなたはおそらく持っていない。

あなたは次のようなことをしたい

import os

for dirName, subDirs, fileNames in os.walk(rootPath):
    # its not clear which files you want, I assume anything that ends with Response.xml?
    for f in fileNames:
        if f.endswith("Response.xml"):
            # this is the path you will want to use
            filePath = os.path.join(dirName, f)

            # now do something with it!
            doSomethingWithFilePath(filePath)

それはテストされていませんが、あなたは考えを持っています...

于 2011-12-12T01:00:11.403 に答える
1

ダンが言ったように、os.walkより良いでしょう。そこにある例を参照してください。

于 2011-12-12T00:28:03.370 に答える