Python でディレクトリ内のすべてのファイルを取得する: 完全かつ効率的なガイド
Updated on
ディレクトリ内のファイル一覧を取得することは、Python ではもっともよくあるタスクのひとつです。データを整理したり、ファイルの前処理をしたり、ワークフローを自動化したりする際によく使われます。
この最新版ガイドでは、次のことを学びます:
os.listdirを使ったファイル一覧取得os.walkを使った再帰的なファイル一覧取得- 拡張子によるファイルフィルタリング
- 画像・動画など特定の種類のファイル一覧取得
- モダンな方法: これらすべてを pathlib で行う、今日推奨されるやり方
globパターンの効果的な使い方
TL;DR — すぐ使えるレシピ集
| タスク | ベストな方法 |
|---|---|
| ファイル一覧(非再帰) | os.listdir または pathlib.Path.iterdir() |
| 再帰的なファイル一覧 | os.walk または pathlib.Path.rglob() |
| 拡張子でフィルタ | pathlib.Path.rglob("*.csv") |
| パターンマッチング | glob.glob() / pathlib.Path.rglob("*pattern*") |
| 全体のおすすめ | pathlib |
1. os.listdir を使う(基本・非再帰)
os.listdir 関数は、指定ディレクトリ内のファイル名とフォルダ名を返しますが、サブフォルダには潜りません。
import os
def list_files(directory):
return os.listdir(directory)
print(list_files("/path/to/your/directory"))これでディレクトリ内のすべてのエントリが取得できますが、フィルタリングや再帰処理を行うには、追加のロジックが必要になります。最新の Python コードでは pathlib(次のセクション)を使うことを検討すべきですが、素早いスクリプト用途には依然として便利です。
2. os.walk で全ファイルを再帰的に取得する
すべてのサブディレクトリをたどってファイルを列挙するには、次のようにします:
import os
def list_files_recursively(directory):
for root, dirs, files in os.walk(directory):
for file in files:
print(os.path.join(root, file))
list_files_recursively("/path/to/your/directory")os.walk は強力かつメモリ効率がよく、大きなディレクトリツリーでも安心して使えます。
3. 拡張子でファイルをフィルタする
walk 中にフィルタリングすることもできます:
import os
def list_files_by_extension(directory, extension):
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(extension):
print(os.path.join(root, file))
list_files_by_extension("/path/to/your/directory", ".json")複数拡張子に対応したい場合は、(".jpg", ".png") のようなタプルを使います。
4. 画像ファイル・動画ファイルを一覧する
画像ファイルの一覧:
import os
def list_image_files(directory):
image_ext = (".jpg", ".jpeg", ".png", ".gif", ".webp")
for root, dirs, files in os.walk(directory):
for file in files:
if file.lower().endswith(image_ext):
print(os.path.join(root, file))
list_image_files("/path/to/your/directory")動画ファイルの一覧:
import os
def list_video_files(directory):
video_ext = (".mp4", ".avi", ".mov", ".mkv")
for root, dirs, files in os.walk(directory):
for file in files:
if file.lower().endswith(video_ext):
print(os.path.join(root, file))
list_video_files("/path/to/your/directory")⭐ 新定番: pathlib を使うモダンな方法(推奨)
Python 3.4 以降では、パス操作には pathlib が推奨 されています。
os.path よりも読みやすく、表現力が高いのが特徴です。
ファイル一覧(非再帰):
from pathlib import Path
def list_files(directory):
return [p for p in Path(directory).iterdir() if p.is_file()]
print(list_files("/path/to/dir"))再帰的にすべてのファイルを一覧:
from pathlib import Path
def list_files_recursive(directory):
return list(Path(directory).rglob("*"))
print(list_files_recursive("/path/to/dir"))拡張子でフィルタ:
from pathlib import Path
for file in Path("/path/to/dir").rglob("*.json"):
print(file)複数種類の拡張子でフィルタ:
from pathlib import Path
extensions = ("*.jpg", "*.png", "*.jpeg")
for ext in extensions:
for file in Path("path/to/dir").rglob(ext):
print(file)Pathlib を使うと、このような処理を非常にシンプルかつ読みやすく書けます。
5. glob でパターンマッチング
シェルのワイルドカードのようなパターンマッチが必要な場合は、glob が便利です:
import glob
json_files = glob.glob("/path/to/your/directory/**/*.json", recursive=True)
print(json_files)よく使うパターン例:
"*.csv""data_*""**/*.jpg"(再帰)
まとめ
このガイドでは、Python でファイル一覧を取得する複数の方法を学びました:
- シンプルなディレクトリ走査には
os.listdir - 再帰的な走査には
os.walk - 拡張子によるファイルフィルタリング
- 画像や動画など特定種類のファイルの扱い方
- ワイルドカード検索用の
glob - そして、モダンで推奨される
pathlibアプローチ
データクレンジング、ファイル自動処理スクリプト、機械学習向けの前処理など、どのような用途であっても、これらのテクニックを使えば、よりクリーンで高速、かつ保守しやすい Python コードを書けるようになります。
FAQs
Python でディレクトリ内のすべてのファイルを一覧表示するには?
次のようにします:
os.listdir(path)もしくは、よりモダンな選択肢として:
Path(path).iterdir()すべてのファイルを再帰的に一覧表示するには?
次のようにします:
os.walk(path)または:
Path(path).rglob("*")拡張子でファイルをフィルタするには?
次のようにします:
file.endswith(".json")または:
Path(path).rglob("*.json")