Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - ファイル名一括変更

Python Python
スポンサーリンク

ファイル名一括変更は「大量ファイルを一瞬で整理する」ための最重要スキル

業務自動化では、ファイル名を一括で整える場面が非常に多くあります。
「日付を付けたい」「連番にしたい」「特定の文字列を置換したい」「命名規則を統一したい」など、手作業では時間がかかる作業を Python なら一瞬で処理できます。

ここでは、初心者でも理解しやすいように、基本の考え方 → 実務テンプレート → 応用例 の順で丁寧に解説します。


ファイル名一括変更の基本:os.rename と splitext の組み合わせ

ファイル名変更の基本構造を理解する

Pythonでファイル名を変更する基本は os.rename() です。

import os

os.rename("old_name.txt", "new_name.txt")
Python

ただし、一括変更では「元のファイル名を加工して新しい名前を作る」必要があります。
そのために使うのが os.path.splitext() です。

import os

name, ext = os.path.splitext("report_001.txt")
print(name)  # report_001
print(ext)   # .txt
Python

この2つを組み合わせることで、
「元の名前を活かしつつ、必要な部分だけ変える」
という柔軟な処理が可能になります。


連番で一括リネームするテンプレート

シナリオ

フォルダ内のファイルを「001.jpg」「002.jpg」…のように連番で整理したい。

コード例

import os

folder = "images"
files = sorted(os.listdir(folder))

num = 1

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

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

    base, ext = os.path.splitext(name)
    new_name = f"{num:03d}{ext}"
    new_path = os.path.join(folder, new_name)

    if os.path.exists(new_path):
        print("スキップ(同名あり):", new_path)
        continue

    os.rename(old_path, new_path)
    print("変更:", old_path, "→", new_path)

    num += 1
Python

深掘りポイント

  • f"{num:03d}" は「3桁ゼロ埋め」の意味
  • sorted() を使うことで、処理順が安定する
  • 上書き防止のために os.path.exists() を必ず入れる

連番リネームは写真整理・スキャンデータ整理などで非常に役立ちます。


ファイル名の一部を置換して一括変更する

シナリオ

ファイル名に含まれる「old」を「new」に置き換えたい。

コード例

import os

folder = "docs"

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

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

    new_name = name.replace("old", "new")
    new_path = os.path.join(folder, new_name)

    if old_path == new_path:
        continue

    if os.path.exists(new_path):
        print("スキップ(同名あり):", new_path)
        continue

    os.rename(old_path, new_path)
    print("変更:", old_path, "→", new_path)
Python

深掘りポイント

  • replace() を使うと文字列置換が簡単
  • 置換後の名前が同じ場合はスキップする
  • 上書き防止チェックは必須

命名規則の変更や、誤ったファイル名の修正に使えます。


日付を付けて一括リネームするテンプレート

シナリオ

ファイル名の先頭に「2026-03-15_」のような日付を付けたい。

コード例

import os
from datetime import date

folder = "reports"
today = date.today().strftime("%Y-%m-%d")

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

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

    new_name = f"{today}_{name}"
    new_path = os.path.join(folder, new_name)

    if os.path.exists(new_path):
        print("スキップ(同名あり):", new_path)
        continue

    os.rename(old_path, new_path)
    print("変更:", old_path, "→", new_path)
Python

深掘りポイント

  • 日付を付けるだけで「いつのデータか」が一目で分かる
  • バックアップやレポート整理で非常に便利

pathlib を使った、より安全で読みやすい書き方

with_name() でファイル名を置き換える

from pathlib import Path

folder = Path("data")

for p in folder.iterdir():
    if p.is_file():
        new_p = p.with_name("new_" + p.name)
        p.rename(new_p)
        print("変更:", p, "→", new_p)
Python

pathlib のメリット

  • パス操作が直感的
  • with_name()with_suffix() が安全で読みやすい
  • 文字列操作よりミスが減る

一括リネームを安全に行うための考え方

  • 上書き防止のために os.path.exists() を必ず入れる
  • まずは「変更せずに新しい名前を表示するだけ」のテストを行う
  • 大量処理ではログを残す
  • 変更後の命名規則を明確にする(連番・日付・置換など)

ファイル名変更は強力ですが、誤操作すると元に戻すのが大変です。
安全設計を意識することで、業務自動化の信頼性が大きく向上します。

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