Pythonで任意のファイルを検索してリストにする方法
作成日:
本ページでは、Pythonでを利用して任意のファイルを検索してリストに格納する方法を説明します。
方法#
Python 3.4 以降で追加された pathlib を利用します。
例えば拡張子が *.py のファイルを現在のディレクトリから検索してリストにするには glob を利用します。
from pathlib import Path
target_dir = Path('.')
files = target_dir.glob('*.py')
目的のディレクトリ以下で再帰的に検索を書ける場合には再帰的な操作を示す ** を利用します。
from pathlib import Path
target_dir = Path('.')
files = target_dir.glob('**/*.py')
あるいは、右側からマッチする rglob を利用しても同等の結果が得られます (こちらの場合 ** は利用しない)。
from pathlib import Path
target_dir = Path('.')
files = target_dir.rglob('*.py')
説明#
pathlib#
pathlib は Python3.4 で追加された機能で、ファイルシステムのパスをオブジェクト指向に取り扱うことができます。パス操作に関する様々な機能を取り入れている、という意味だと思っていただいて差し支えないでしょう。
pathlib.Path が主に利用されるクラスで、本関数を利用することでプラットフォームに応じたオブジェクトが生成されます。
from pathlib import Path
p = Path('.')
print(type(p))
# Linux の場合: <class 'pathlib.PosixPath'>
# Windows の場合: <class 'pathlib.WindowsPath'>
PosixPath および WindowsPath は Path を継承して作成されたクラスです。基本的な文字列操作については特に気にせず行えますが、文字列との結合などはできないためその場合には str によって文字列へ変換する必要があります。
glob#
glob は fnmatch というモジュールと同じ形式の簡易的な正規表現[1] を引数に入れることでファイルの検索を実施することができます。利用できる特殊文字は以下の通りです。
特殊文字 | 意味 |
* | すべての文字列 |
** | すべてディレクトリとすべてのサブディレクトリ |
? | 任意の1文字 |
[abc] | カッコ内のいずれかの1文字 |
[!abc] | カッコ内のいずれかの1文字以外 |