特定の拡張子を持つファイルを Python でのみ見つける方法
-
glob.glob
ファイル検索方法 -
os.listdir()
ファイル検索方法 -
pathlib.glob
ファイル検索方法 - Python のディレクトリおよびそのサブディレクトリで特定の拡張子を持つファイルを検索する
-
pathlib
モジュールファイルを再帰的に検索する
この記事では、Python でのみ特定の拡張子を持つファイルを見つけるためのさまざまな方法を紹介します。
glob.glob
ファイル検索方法
glob.glob
モジュールを使用して、Python でのみ特定の拡張子を持つファイルを見つけることができます。
import glob
targetPattern = r"C:\Test\*.txt"
glob.glob(targetPattern)
上記のコードは、ディレクトリ C:\Test
に拡張子 txt
を持つファイルを見つける方法を示しています。
os.listdir()
ファイル検索方法
os.listdir()
関数は、指定されたディレクトリ内のすべてのファイルをリストしますが、ファイルパス情報は含まれません。str.endswith()
関数を使用して、特定の拡張子を持つファイルを抽出できます。
>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [_ for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['test.txt', 'test1.txt']
os.path.join()
関数を使用してフルパスを作成する必要があります。
>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [os.path.join(fileDir, _) for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test1.txt']
pathlib.glob
ファイル検索方法
pathlib
モジュール は Python 3.4 で導入され、オブジェクト指向のファイルシステムパスを提供します。これには、Windows OS の Windows パスと Unix 類似システムの POSIX パスの 2つのスタイルがあります。
>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt')]
結果は WindowsPath
で表され、str()
関数で結果を文字列表現に変換できます。例えば、
>>> [str(_) for _ in pathlib.Path(fileDir).glob(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test.txt']
Python のディレクトリおよびそのサブディレクトリで特定の拡張子を持つファイルを検索する
C:\Test\*.txt
のパターンは、C:\Test
ディレクトリ内の txt
ファイルのみを検索し、そのサブディレクトリ内は検索しません。サブディレクトリ内の txt
ファイルも検索する場合は、パターンを少し変更することができます。
import glob
targetPattern = r"C:\Test\**\*.txt"
glob.glob(targetPattern)
Test
と \*.txt
の間のワイルドカード **
は、ディレクトリとそのサブディレクトリで txt
ファイルを見つけることを意味します。
pathlib
モジュールファイルを再帰的に検索する
ファイルを再帰的に検索するために glob.glob
に **
を追加するのと同様に、pathlib.Path.glob
メソッドに**
を追加して、特定の拡張子を持つファイルを再帰的に検索することもできます。
>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"**\*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt'), WindowsPath('C:/Test/sub/test1.txt')]