【python】osモジュールのwalk関数を利用してファイルを探索しリストに格納する

python
あい
あい

今回はpython
osモジュールの
walk関数活用して
ファイル探索を行い

リストに
ファイル情報を
獲得します

[R]※本サイトにはプロモーションが含まれています

再帰関数とは ?

関数自身を関数の内部で呼び出すことが出来る関数

n!を計算するプログラムを再帰関数を用いて実装します

def fact(n):
    if n == 0:
        return 1
    else:
        return n * fact(n - 1)

num = 4
print(f"{num}! = {fact(num)}")

以下のような計算になります

fact(4) = 4 * fact(3)
        = 4 * (3 * fact(2))
        = 4 * (3 * (2 * fact(1)))
        = 4 * (3 * (2 * (1 * fact(0))))
        = 4 * (3 * (2 * (1 * 1)))  # fact(0) は 1 を返す
        = 4 * 3 * 2 * 1
        = 24
あい
あい

4 * fact(3)を返し
fact(3)の処理を実行して
4*(3 * fact(2))
fact(2)の処理を実行して
4*(3 * (2*fact(1)))

実行していく
イメージなんだね

再帰的にファイルを探索する

OSモジュールのwalk関数を利用すると

指定したディレクトリを

再帰的に巡回してファイルを検索できます

下記のコードは指定のディレクトリから

csvファイルの情報をリストに格納するコードです

import os

def find_csv_files(directory):
    csv_list = []
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith('.csv'):
                csv_list.append(os.path.join(root, file))
    return csv_list

# 使用例
directory_path = 'your//directory//path'
csv_files = find_csv_files(directory_path)
print(csv_files)

rootにはフォルダアドレス

dirsに探索中のアドレス内のフォルダ

filesに探索中のアドレス内のファイル

リスト形式で格納されるので

csvファイルがフォルダアドレス内に存在する場合

下記の処理でcsvファイルを取得します

        for file in files:
            if file.endswith('.csv'):
                csv_list.append(os.path.join(root, file))

指定のキーワードを含むファイルを

フィルタリングしたい場合は

以下のようなコードになります

import os

def find_csv_files(directory, keywords):
    csv_list = []
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith('.csv') and any(keyword in file for keyword in keywords):
                csv_list.append(os.path.join(root, file))
    return csv_list

# 使用例
directory_path = 'your/directory/path'
keywords = ['data', 'report', 'log']  # 複数のキーワード
csv_files = find_csv_files(directory_path, keywords)
print(csv_files)

keywordsはリストになっており

複数のキーワードを指定できます

any(keyword in file for keyword in keywords)

を使っていずれかのキーワードが

含まれるかをチェックし

条件に当てはまったもののみ

リストに格納します

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