Pythonでファイル名の前後に文字列や連番を加えて一括変更する方法
複数のファイル名を一括で変更したい場合、Pythonを使用すると効率的に処理できます。本記事では、ファイル名の前後に文字列を追加したり、連番を付けたりする方法を詳しく解説します。
基本的なファイル名変更
ファイル名の前に文字列を追加
import os
from pathlib import Path
# 現在のディレクトリ内の.txtファイルに"backup_"を前に付ける
path = Path(".")
for file in path.glob("*.txt"):
new_name = file.parent / f"backup_{file.name}"
file.rename(new_name)
print(f"{file.name} → {new_name.name}")
ファイル名の後(拡張子前)に文字列を追加
from pathlib import Path
path = Path(".")
for file in path.glob("*.jpg"):
stem = file.stem # 拡張子なしのファイル名
suffix = file.suffix # 拡張子
new_name = file.parent / f"{stem}_edited{suffix}"
file.rename(new_name)
print(f"{file.name} → {new_name.name}")
連番を付けたファイル名変更
ファイル名の前に連番を追加
from pathlib import Path
path = Path(".")
files = list(path.glob("*.png"))
for i, file in enumerate(files, 1):
new_name = file.parent / f"{i:03d}_{file.name}"
file.rename(new_name)
print(f"{file.name} → {new_name.name}")
ファイル名を連番のみに変更
from pathlib import Path
path = Path(".")
files = sorted(path.glob("*.pdf")) # ソートして順序を統一
for i, file in enumerate(files, 1):
new_name = file.parent / f"document_{i:02d}{file.suffix}"
file.rename(new_name)
print(f"{file.name} → {new_name.name}")
実践的な一括変更例
日付を含むファイル名に変更
from pathlib import Path
from datetime import datetime
path = Path(".")
date_str = datetime.now().strftime("%Y%m%d")
for file in path.glob("*.log"):
new_name = file.parent / f"{date_str}_{file.name}"
file.rename(new_name)
print(f"{file.name} → {new_name.name}")
特定の文字列を置換
from pathlib import Path
path = Path(".")
for file in path.glob("*temp*.txt"):
new_name_str = file.name.replace("temp", "final")
new_name = file.parent / new_name_str
file.rename(new_name)
print(f"{file.name} → {new_name.name}")
ファイルサイズを含むファイル名に変更
from pathlib import Path
path = Path(".")
for file in path.glob("*.mp4"):
size_mb = file.stat().st_size / (1024 * 1024)
stem = file.stem
suffix = file.suffix
new_name = file.parent / f"{stem}_{size_mb:.1f}MB{suffix}"
file.rename(new_name)
print(f"{file.name} → {new_name.name}")
安全なファイル名変更の実装
変更前に確認を求める機能
from pathlib import Path
def batch_rename_with_confirmation(pattern, prefix="", suffix=""):
path = Path(".")
files = list(path.glob(pattern))
if not files:
print("該当するファイルが見つかりません。")
return
print("以下のファイルが変更されます:")
for i, file in enumerate(files, 1):
stem = file.stem
ext = file.suffix
new_name = f"{prefix}{stem}{suffix}{ext}"
print(f"{i}. {file.name} → {new_name}")
confirm = input("\n実行しますか? (y/N): ")
if confirm.lower() == 'y':
for file in files:
stem = file.stem
ext = file.suffix
new_name = file.parent / f"{prefix}{stem}{suffix}{ext}"
file.rename(new_name)
print("変更完了!")
else:
print("キャンセルしました。")
# 使用例
batch_rename_with_confirmation("*.txt", prefix="backup_", suffix="_v1")
重複ファイル名の回避
from pathlib import Path
def safe_rename(original_file, new_name_base):
path = original_file.parent
suffix = original_file.suffix
new_name = path / f"{new_name_base}{suffix}"
# 重複がある場合は連番を追加
counter = 1
while new_name.exists():
new_name = path / f"{new_name_base}_{counter}{suffix}"
counter += 1
original_file.rename(new_name)
return new_name
# 使用例
path = Path(".")
for i, file in enumerate(path.glob("*.jpg"), 1):
new_file = safe_rename(file, f"image_{i:03d}")
print(f"{file.name} → {new_file.name}")
エラーハンドリング付きの変更処理
from pathlib import Path
import shutil
def batch_rename_safe(pattern, prefix="", suffix=""):
path = Path(".")
files = list(path.glob(pattern))
success_count = 0
for file in files:
try:
stem = file.stem
ext = file.suffix
new_name = file.parent / f"{prefix}{stem}{suffix}{ext}"
if new_name.exists():
print(f"スキップ: {new_name.name} は既に存在します")
continue
file.rename(new_name)
print(f"成功: {file.name} → {new_name.name}")
success_count += 1
except Exception as e:
print(f"エラー: {file.name} - {e}")
print(f"\n処理完了: {success_count}件のファイルを変更しました")
# 使用例
batch_rename_safe("*.txt", prefix="processed_")
まとめ
Pythonを使用したファイル名の一括変更は、手動では時間のかかる作業を効率化できる便利な機能です。pathlibモジュールを使用することで、より読みやすく安全なコードを書くことができます。実際の運用では、事前確認機能や重複回避機能、エラーハンドリングを組み込んで、安全にファイル名を変更することを心がけましょう。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座
