Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - 特定拡張子検索

Python Python
スポンサーリンク

特定拡張子検索は「必要なファイルだけを正確に抽出する」ための基本スキル

業務自動化では、フォルダの中から 特定の拡張子だけを探す処理が非常に多く登場します。
「CSV だけ処理したい」「画像ファイルだけ集めたい」「ログファイルだけ別フォルダに移動したい」など、日常業務の多くがこのパターンに当てはまります。

Pythonでは、os モジュールや pathlib を使うことで、初心者でも安全かつ確実に拡張子検索ができます。
ここでは、基本から実務テンプレートまで丁寧に解説します。


拡張子検索の基本:os.listdir と endswith の組み合わせ

フォルダ直下から特定拡張子だけを探す基本形

import os

folder = "data"

for name in os.listdir(folder):
    path = os.path.join(folder, name)

    if os.path.isfile(path) and name.lower().endswith(".csv"):
        print("CSV:", path)
Python

重要ポイントを深掘り

  • os.listdir() はファイルとフォルダを両方返すため、os.path.isfile() でファイルだけに絞る
  • endswith(".csv") で拡張子を判定
  • lower() を使うことで .CSV のような大文字にも対応

この3つの組み合わせが、特定拡張子検索の基本パターンです。


複数拡張子をまとめて検索する

例:jpg と png を両方探したい

import os

folder = "images"

for name in os.listdir(folder):
    path = os.path.join(folder, name)

    if not os.path.isfile(path):
        continue

    if name.lower().endswith((".jpg", ".jpeg", ".png")):
        print("画像ファイル:", path)
Python

深掘りポイント

  • endswith() はタプルを渡すと「どれかに一致」で判定できる
  • 画像・文書・ログなど、複数拡張子を扱う業務で非常に便利

サブフォルダも含めて検索する:os.walk の活用

階層構造をすべて探索する

import os

root = "project"

for current, dirs, files in os.walk(root):
    for name in files:
        if name.lower().endswith(".xlsx"):
            print("Excel:", os.path.join(current, name))
Python

深掘りポイント

  • os.walk() は階層を自動で潜ってくれる
  • 大規模フォルダでも高速
  • 「プロジェクト全体から特定拡張子を探す」業務で必須

例題①:CSV ファイルだけを一覧化してリストに保存する

シナリオ

data フォルダ内の CSV をすべて集めて後で処理したい。

import os

folder = "data"
csv_files = []

for name in os.listdir(folder):
    path = os.path.join(folder, name)

    if os.path.isfile(path) and name.lower().endswith(".csv"):
        csv_files.append(path)

for f in csv_files:
    print(f)
Python

深掘りポイント

  • 検索結果をリストに保存して後でまとめて処理できる
  • ETL処理やバッチ処理でよく使うパターン

例題②:特定拡張子のファイルだけ別フォルダへ移動する

シナリオ

.log ファイルだけを logs_archive に移動したい。

import os
import shutil

src = "logs"
dst = "logs_archive"

os.makedirs(dst, exist_ok=True)

for name in os.listdir(src):
    path = os.path.join(src, name)

    if os.path.isfile(path) and name.lower().endswith(".log"):
        new_path = os.path.join(dst, name)
        shutil.move(path, new_path)
        print("移動:", path, "→", new_path)
Python

深掘りポイント

  • 拡張子検索とファイル移動を組み合わせると「自動仕分け」が実現できる
  • ログ管理やバックアップ処理で非常に役立つ

例題③:サブフォルダを含めて画像ファイルだけを検索して一覧化

シナリオ

プロジェクト全体から画像ファイルだけを探したい。

import os

root = "project"
images = []

for current, dirs, files in os.walk(root):
    for name in files:
        if name.lower().endswith((".jpg", ".jpeg", ".png")):
            images.append(os.path.join(current, name))

for img in images:
    print(img)
Python

深掘りポイント

  • 階層構造を意識せずに検索できる
  • 大規模プロジェクトのファイル管理に最適

pathlib を使ったモダンで読みやすい検索

rglob を使うと直感的に書ける

from pathlib import Path

root = Path("project")

for p in root.rglob("*.csv"):
    print("CSV:", p)
Python

pathlib のメリット

  • パス操作が直感的で読みやすい
  • rglob("*.csv") のようにパターン検索が簡単
  • サブフォルダも自動で探索してくれる

特定拡張子検索を安全かつ効率的に行うための考え方

  • ファイルかフォルダかを必ず判定する
  • 大文字小文字の揺れを吸収するために lower() を使う
  • 複数拡張子を扱う場合はタプルでまとめる
  • サブフォルダを含めるかどうかで listdirwalk を使い分ける
  • 大規模フォルダでは os.walk()pathlib.rglob() が高速

特定拡張子検索は、業務自動化の入口であり、ファイル処理のほぼすべての場面で役立つ重要スキルです。

タイトルとURLをコピーしました