大量の Excel ファイルを納品先ごとに番号管理したい場合、手作業でリネームを行うのは時間もかかり誤入力のリスクもございます。本記事では pathlib を用いて、フォルダー内に保存された .xlsx ファイルへ連番を付与しながら一括でファイル名を変更する方法を解説いたします。
目次
1 . 想定ディレクトリー構成
project_root/
└─ reports/
├─ budget.xlsx
├─ forecast.xlsx
└─ summary.xlsx
- reports フォルダーにある Excel ファイル(拡張子 .xlsx)を対象といたします。
- 元のファイル名を保持しつつ、末尾へ 4 桁の連番を付与する運用を想定いたします。
2 . 必要ライブラリ
標準ライブラリのみで実装できますので、追加インストールは不要でございます。
from pathlib import Path
3 . サンプルコード
from pathlib import Path
# 対象フォルダーを指定
base_dir = Path('./reports')
# フォルダー内の .xlsx ファイルを取得し、連番でリネーム
for counter, file_path in enumerate(base_dir.glob('*.xlsx'), start=1):
new_name = f'{file_path.stem}_{counter:04d}.xlsx'
file_path.rename(file_path.with_name(new_name))
コード解説
行 | 説明 |
---|---|
base_dir = Path('./reports') | 処理対象ディレクトリーを Path オブジェクトで指定いたします。 |
glob('*.xlsx') | 拡張子が .xlsx のファイルのみを抽出いたします。 |
enumerate(..., start=1) | 連番を 1 から付与し、counter:04d で 4 桁ゼロ埋め表記にいたします。 |
file_path.stem | 拡張子を除いた元ファイル名を取得し、連番を付加いたします。 |
file_path.rename() | 生成した新ファイル名でリネームを実行いたします。 |
4 . 実行結果
budget.xlsx → budget_0001.xlsx
forecast.xlsx → forecast_0002.xlsx
summary.xlsx → summary_0003.xlsx
このように、元のファイル名を保持しつつ末尾へ連番が追加されます。並び順は glob()
が返す結果(ファイルシステムの順序)に依存するため、アルファベット順や更新日時順にリネームしたい場合は sorted()
や key
引数を併用ください。
5 . 応用アイデア
要件 | 実装例 |
---|---|
サブフォルダーも再帰的に処理したい | base_dir.rglob('*.xlsx') を使用いたします。 |
連番の桁数を変更したい | counter:02d や counter:05d などへ変更ください。 |
連番を先頭へ付けたい | new_name = f'{counter:04d}_{file_path.stem}.xlsx' といたします。 |
まとめ
- pathlib を活用すると、OS 依存コードを書かずにファイル操作を簡潔に記述できます。
enumerate
と f-string のフォーマット指定子を組み合わせることで、ゼロ埋め連番 を容易に生成可能です。- 手作業によるリネームミスを防止するとともに、リネーム作業の工数を大幅に削減できますので、ぜひご活用くださいませ。