ファイル名一括変更は「大量ファイルを一瞬で整理する」ための最重要スキル
業務自動化では、ファイル名を一括で整える場面が非常に多くあります。
「日付を付けたい」「連番にしたい」「特定の文字列を置換したい」「命名規則を統一したい」など、手作業では時間がかかる作業を 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)
Pythonpathlib のメリット
- パス操作が直感的
with_name()やwith_suffix()が安全で読みやすい- 文字列操作よりミスが減る
一括リネームを安全に行うための考え方
- 上書き防止のために
os.path.exists()を必ず入れる - まずは「変更せずに新しい名前を表示するだけ」のテストを行う
- 大量処理ではログを残す
- 変更後の命名規則を明確にする(連番・日付・置換など)
ファイル名変更は強力ですが、誤操作すると元に戻すのが大変です。
安全設計を意識することで、業務自動化の信頼性が大きく向上します。
