スポンサーリンク

glob.glob()でファイル検索

例えば、下記のディレクトリ構成があったとします。

 $ tree dir1/
dir1/
├── dir2
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── dir3
│   └── file5.txt
└── file1.txt

2 directories, 5 files

globをimportして、glob()を実行するのも一つの手です。
下記は、ディレクトリを再帰的に検索して(recursive=True)、file5.txtを探しています。
ディレクトリの階層は問わないので、'**/file5.txt'と指定しています。

 $ cat sample1.py 
#!/usr/bin/env python3
# coding: UTF-8

import glob

matchPath = glob.glob('**/file5.txt', recursive=True)

print(matchPath)

下記が実行結果になります。
 $ ./sample1.py 
['dir1/dir3/file5.txt']

スポンサーリンク

os.walk()でファイル検索

osをimportして、walk()を使うのも一つの手です
ただし、os.walk()の結果をforループ処理して取得したファイルに対して、if文でマッチ判定をしています。

参考:[Python]find -type fのようにサブディレクトリ以下のファイルを再帰的に参照

下記がサンプルコードになります。
先程と同様に、file5.txtを検索しています。

 $ cat sample2.py 
#!/usr/bin/env python3
# coding: UTF-8

import os

targetDirPath = './dir1'

for dirPath, dirList, fileList in os.walk(targetDirPath):
	for fileName in fileList:
		if fileName == 'file5.txt':
			print(dirPath + "/" + fileName)

下記が実行結果になります。
 $ ./sample2.py 
./dir1/dir3/file5.txt

スポンサーリンク