指定ディレクトリ以下の画像ファイル名を再帰的にすべて取得するプログラム (Python)

os.walkを使えば再帰的にディレクトリ探索ができる.

「今調べている最中のディレクトリ名」「見つかったディレクトリのリスト」「見つかったファイルのリスト」を返すらしい(参考文献より)。

# coding: utf-8
import os,imghdr,shutil

def get_image_list(path):
    file_list = []
    for (root, dirs, files) in os.walk(path): # 再帰的に探索
        for file in files: # ファイル名だけ取得
            target = os.path.join(root,file).replace("\\", "/")  # フルパス取得
            if os.path.isfile(target): # ファイルかどうか判別
                if imghdr.what(target) != None : # 画像ファイルかどうかの判別
                    file_list.append(target) # 画像ファイルであればリストに追加
    return file_list

def copy_list_into_dir(file_list,dir_path):
    num = 0
    for file_name in file_list:
        shutil.copyfile(file_name,dir_path+"/"+str(num)) # testディレクトリにコピー
        num += 1

if __name__ == "__main__":
    image_list = get_image_list(".") # 画像ファイル名のリスト取得
    copy_list_into_dir(image_list,"./test") # すべてtestディレクトリにコピー

参考文献がとても参考になりました。感謝です。

参考文献

145:ディレクトリ内のファイルを再帰的に処理