Skip to content

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")