私の答えは非常に基本的で単純です。私自身初心者であり、Web を検索して答えを見つけ (特にdocs.python.org の優れたドキュメントを参照)、次のようなテスト コードを試してみました。
for root, dirs, files in os.walk(startdir)
print ("__________________")
print (root)
for file in files:
print ("---",file)
これにより、ディレクトリ ツリーが出力されます。ここで、各ディレクトリ (開始ディレクトリと含まれるサブディレクトリ) の前に行があり、そこに含まれるファイルが続きます。
次の 2 点に注意する必要があると思います。
(1) os.walk は 3 タプル (トリプル) <root,dirs,filenames> を生成します。
root は、ルート ディレクトリの名前を含む文字列です。
dirs は文字列のリストです。ルートに直接含まれるディレクトリ名、つまり、最初のレベルに含まれるディレクトリ名で、サブディレクトリが含まれる可能性はありません。
filenames は文字列のリストです: root に直接含まれるファイル名です。
(2) 次のような for ループ
for root, subdirs, files in os.walk(YourStartDir)
ルートディレクトリとそのすべてのサブディレクトリをループします。ファイルごとに手順を実行する必要はありません。ディレクトリ ツリーをスキャンし、各ステップで (ツリー内の各ディレクトリに対して)、そこに含まれるファイル名のリストと、それに直接含まれるサブディレクトリのリストを埋めます。n 個のディレクトリ (ルートとそのサブディレクトリを含む) がある場合、for ループはn回ループします。つまり、 nステップかかります。これを確認するための短いテスト コードを記述できます。たとえば、カウンターを使用します。各ステップで、3 つのタプル (文字列と 2 つの (場合によっては空の) 文字列のリスト) を生成します。この例では、3 タプルの要素は "root"、"subdirs"、"files" と呼ばれていますが、これらの名前はあなた次第です。あなたのコードが
for a, b, c in os.walk(startdir)
3 タプルの要素は「a」、「b」、「c」と呼ばれます。
テストコードに戻りましょう:
for root, dirs, files in os.walk(startdir)
print ("__________________")
print (root)
for file in files:
print ("---",file)
最初のループ: root は入力で指定したディレクトリ (開始パス、開始ディレクトリ: 文字列)、 dirs は含まれるサブディレクトリ名のリスト (ただし、それらに含まれるディレクトリの名前ではない)、 files は含まれるファイルのリスト。テスト コードでは、リスト "dirs" を使用していません。
2 番目のループ: root は最初のサブディレクトリになり、dirs はそれに含まれるサブディレクトリのリスト、files はそれに含まれるファイルのリストになります。
...というように、ツリーの最後のサブディレクトリに到達するまで。
os.walk にはオプションの引数が 3 つあります。Web 上でそれらとその使用法に関する多くの情報を見つけることができますが、あなたの質問は os.walk の基本に関するものだと思います。