フォルダ内の写真のファイル名を撮影時刻に変更する
デジカメ等で写真を撮ると「DSC-1234」のように連番のファイル名が付きますが、「DSC-9999」の次は「DSC-0001」となるため、ファイルを連続処理する場合など少し面倒です。ファイルのEXIF情報から撮影時刻を取得し、ファイル名を撮影時刻に変更します。
関連記事
準備
ファイル名を変更したい画像ファイル(デジカメで撮影した写真)3つを、jupyter notebookファイル(***.ipynb)と同じディレクトリにフォルダ'rename'を作成しその中に保存しました。
環境
- windows10 home
- Anaconda 3/ jupyter notebook 6.4.6
- Python 3.10.4
- Pillow 9.1.0
コード
フォルダ'rename'に保存されたファイルをリスト化し、ひとつづつ読みだしPillowのImage.openで開きます。開いた画像ファイル(写真)に対して._getexif()メソッドでexif情報を取得します。画像ファイルを開いたままだとファイル名変更の際エラーとなるのでImage.closeで閉じます。exif情報のタグ306の撮影時刻情報を取得、撮影時刻情報は、コロンで区切られたYYYY:MM:DD hh:mm:ss(年:月:日 時:分:秒)の書式なので、そこからコロンを除いたYYYYMMDD-hhmmssの形式でファイル名を作成、ファイル名を変更します。
import os from PIL import Image # renameフォルダ中のファイルをリストに files = os.listdir('rename/') # renameフォルダ中のファイルを順番に読みだす for file in files: img = Image.open('rename/'+file) # 画像を開く exif = img._getexif() # EXIF情報を得る img.close() # 画像を閉じる # EXIF情報からタグ306(撮影時刻)を抽出 # コロンを除いたデータからファイル名作成 for tag, value in exif.items(): if tag == 306: filename = (value[0:4] +value[5:7] +value[8:10] +'-' +value[11:13] +value[14:16] +value[17:19]) # 撮影時刻から作成したファイル名に変更する os.rename('rename/'+file, 'rename/'+filename+'.jpg')
実行結果
ファイル名が撮影時刻に変更されます。