特定の拡張子を持つファイルを Python でのみ見つける方法

Jinku Hu 2020年6月25日 2020年1月1日 Python Python File
  1. glob.glob ファイル検索方法
  2. os.listdir() ファイル検索方法
  3. pathlib.glob ファイル検索方法
  4. Python のディレクトリおよびそのサブディレクトリで特定の拡張子を持つファイルを検索する
  5. pathlib モジュールファイルを再帰的に検索する
特定の拡張子を持つファイルを Python でのみ見つける方法

この記事では、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')]
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

関連記事 - Python File

  • Python でディレクトリのすべてのファイルを取得する方法
  • Python でファイルにテキストを追加する方法
  • Python にファイルが存在するかどうかを確認する方法
  • Python でファイルから特定の行を読み取る方法
  • テキストファイルを読み、その内容を Python で印刷する