あなたが何をしたいのかは完全には明確ではありませんが、私はあなたがあなたが望むことをする方法を理解するのに十分なことをする例を提供することができます:「anyname」という名前の各ディレクトリにある3番目のファイルのパス名を印刷しますこれは、トップのちょうど2レベル下です。
for dirpath, dirnames, filenames in os.walk(top):
depth = os.path.relpath(dirpath, top).count(os.pathsep)
if depth == 2 and os.path.basename(dirpath) == "anyname":
print(os.path.join(dirpath, filenames[2]))
walk
をプルーニングして、2つ以上の深さのディレクトリを見ないようにすることで、これをはるかに効率的にすることができます。
for dirpath, dirnames, filenames in os.walk(top):
depth = os.path.relpath(dirpath, top).count(os.pathsep)
if depth == 2:
if os.path.basename(dirpath) == "anyname":
print(os.path.join(dirpath, filenames[2]))
dirnames.clear()
または、さらに効率的ですが、もう少し複雑になりますが、「anyname」という名前ではないすべてのdepth-2ディレクトリを削除します。
for dirpath, dirnames, filenames in os.walk(top):
depth = os.path.relpath(dirpath, top).count(os.pathsep)
if depth == 1:
dirnames[:] = ["anyname"] if "anyname" in dirnames else []
elif depth == 2:
print(os.path.join(dirpath, filenames[2]))
dirnames.clear()