あい
今回は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)
を使っていずれかのキーワードが
含まれるかをチェックし
条件に当てはまったもののみ
リストに格納します