7.3.3フォルダー/ファイル情報を再起的に取得する

構文walk関数
walk(top, topdown=True)
top :走査するフォルダーのパス
topdown :上位フォルダーから走査するか(Falseで下位フォルダーから走査)

>>> import os
>>>
>>> for path, dirs, files in os.walk('C:\\data\\selfpy\\chap07/doc'):
...    print(path)
...    print(dirs)
...    print(files)
...    print('--------------')
...
C:\data\selfpy\chap07/doc
['foo', 'hoge', 'piyo']
['z001.txt', 'z002.txt']
--------------
C:\data\selfpy\chap07/doc\foo
['bar']
['a001.log', 'f001.txt', 'f002.txt']
--------------
C:\data\selfpy\chap07/doc\foo\bar
[]
['b001.txt']
--------------
C:\data\selfpy\chap07/doc\hoge
[]
['h001.txt', 'h002.txt']
--------------
C:\data\selfpy\chap07/doc\piyo
[]
[]
--------------
>>
  • os.walk 関数を使用して、指定したディレクトリ C:\data\selfpy\chap07/doc 内のファイルとディレクトリを再帰的に取得します。
  • ループ内の for 文で、各ディレクトリを走査しています。
  • path 変数には現在のディレクトリのパスが格納されます。最初の出力はルートディレクトリのパスである C:\data\selfpy\chap07/doc です。
  • dirs 変数には現在のディレクトリ内のサブディレクトリのリストが格納されます。2番目の出力はサブディレクトリのリスト ['foo', 'hoge', 'piyo'] です。
  • files 変数には現在のディレクトリ内のファイルのリストが格納されます。3番目の出力はファイルのリスト ['z001.txt', 'z002.txt'] です。
  • 各ディレクトリのパス、サブディレクトリのリスト、ファイルのリストが出力された後、区切り線 -------------- が表示されます。
  • このプロセスは、再帰的に各サブディレクトリに対して繰り返されます。各ディレクトリ内のサブディレクトリとファイルが順番に表示されます。
>>> import os
>>>
>>> for path, dirs, files in os.walk('C:\\data\\selfpy\\chap07'):
...     #配下のファイルだけを列挙
...     for f in files:
...        #拡張子「.txt」のものだけを表示
...        if f.endswith('.txt'):
...           print(os.path.join(path, f))
...
C:\data\selfpy\chap07\sample.txt
C:\data\selfpy\chap07\child\dummy.txt
C:\data\selfpy\chap07\doc\z001.txt
C:\data\selfpy\chap07\doc\z002.txt
C:\data\selfpy\chap07\doc\foo\f001.txt
C:\data\selfpy\chap07\doc\foo\f002.txt
C:\data\selfpy\chap07\doc\foo\bar\b001.txt
C:\data\selfpy\chap07\doc\hoge\h001.txt
C:\data\selfpy\chap07\doc\hoge\h002.txt
>>>
  • os.walk 関数を使用して、指定したディレクトリ C:\data\selfpy\chap07 内のファイルとディレクトリを再帰的に取得します。
  • 最初のループでは、path 変数には現在のディレクトリのパスが、dirs 変数には現在のディレクトリ内のサブディレクトリのリストが、files 変数には現在のディレクトリ内のファイルのリストが格納されます。
  • 内側のループでは、各ファイルに対して処理を行います。
  • f.endswith('.txt') の条件により、拡張子が .txt のファイルのみを選択します。
  • os.path.join(path, f) を使用して、ディレクトリのパスとファイル名を結合して表示します。
  • ループが完了すると、指定したディレクトリとそのサブディレクトリ内に存在する拡張子が .txt のファイルのパスが表示されます。

このコードにより、指定したディレクトリとそのサブディレクトリ内にある拡張子が .txt のファイルのパスを再帰的に取得して表示することができます。



構文の top とか todownとかがわかってないですね。