【Python】指定フォルダ配下(サブフォルダ含む)の、全ての対象ファイルに対して処理を行う【再帰】

指定フォルダ配下(サブフォルダ含む)の
 ・全ての対象ファイル
に対し、処理を行うコードを記載します!

コード

ここでは例として
 ・デスクトップにある「test」フォルダ配下の
 ・全てのcsvファイルのみに対して処理(ファイルパスを画面へ出力)
をします。
※「test」フォルダには「csvファイルを含む複数のファイル」があります。
※「test」フォルダには「sub」フォルダがあります。
※「sub」フォルダには「csvファイルを含む複数のファイル」があります。

「test」フォルダ
「test」フォルダ
「test」フォルダの中の「sub」フォルダ
「test」フォルダの中の「sub」フォルダ
import os

# 対象フォルダ
target_folder = r'C:\Users\lunch\Desktop\test'
# 対象ファイル
target_file = 'csv'

for cur_dir, dirs, files in os.walk(target_folder): 
    for file in files:
        # ファイル名を小文字にした後、「最後の文字列(=拡張子)」を判定
        if not file.lower().endswith((target_file)):
           continue
        # ファイルパスを組み立て
        filePath = os.path.join(cur_dir, file)
        print(filePath)

以下を指定します(4~6行目)。
・対象フォルダ
・対象ファイル

標準ライブラリ「os」モジュールの「walk」により、対象フォルダ配下を再帰的に走査します(8行目)。

「strクラス」クラスの「lower」メソッドにより、文字列(ここではファイル名)を小文字にします(11行目)。

「strクラス」クラスの「endswith」メソッドにより、文字列(ここではファイル名)の「最後の文字列(=拡張子)」を取得します(11行目)。

標準ライブラリ「os.path」モジュールの「join」により、ファイルパスを組み立てます(14行目)。

実行結果

指定フォルダ配下(サブフォルダ含む)の、全ての対象ファイルに対して処理できました。
※サブフォルダも含め、全てのcsvファイルのみに対して処理できました。

実行結果
実行結果

参考①

標準ライブラリ「pathlib」モジュールでも同様のことができます。

import pathlib

# 対象フォルダ
targetFolder = r'C:\Users\user\Desktop\test'
# 対象ファイル
targetFile = 'csv'

for file in pathlib.Path(targetFolder).glob('**\*.' + targetFile): 
    print(file)

参考②

上記で使用した以下の詳細は、公式サイトをご確認ください

●標準ライブラリ「os」モジュールの「walk」


●「strクラス」クラスの「lower」メソッド


●「strクラス」クラスの「endswith」メソッド


●標準ライブラリ「os.path」モジュールの「join」


●標準ライブラリ「pathlib」モジュール

タイトルとURLをコピーしました