Pythonを使って、何十、何百というファイルに対し、連番付きで一括リネームする方法を紹介する。

今回は以下のような乱数で構成された画像ファイルに対し処理を行っていく。

ちなみにこれはMacの「写真」アプリからコピーしてきた画像ファイルだ。

ライブラリの読み込み

今回使用するライブラリは以下の二つだけ。

import glob
import os

globは、指定した条件にマッチするパスの一覧を再帰的に取得するモジュールで、ファイル操作などの際に使われる。

osは、OS依存の機能を利用するモジュールで、こちらもファイルやディレクトリ操作の際によく使われる。

globを使ってファイル一覧を取得

一度、確認のためにglobを使って、ファイルを正しく取得できるかチェックしてみる。

print(glob.glob('./img/*'))

上記のようにワイルドカードを指定すれば、imgディレクトリ内の全てのファイルが取得できる。

※jpgのみを取得したい場合は「*.jpg」と書けばOK。

ファイルに連番をつけ一括リネーム実行

確認ができたら早速ファイル名の一括変更を行ってみよう。

path = './img/'
files = glob.glob(path+'*')

for i, f in enumerate(files):
	fname = 'img_' + str(i) + '.jpg'
	os.rename(f, path + fname)

コードの解説をする。

まず、変数pathで指定したディレクトリ内の全てのファイルを変数filesに格納。

そして取得したファイルをfor文で一つずつ処理していく。
連番を使う際は、enumerate関数でインデックス番号も同時に取得すると良い。

for文の中身はいたってシンプルだ。

連番付きのファイル名を設定し、rename関数でファイル名の変更を実行しているだけだ。
rename関数の第一引数には元のファイル名を、第二引数には新しいファイル名を指定する。

完成したコードの実行結果がこちら。