デジカメで撮影した画像ファイル名を YYMMDD_HHMMSS.jpg みたいな日付時刻文字列に変換する
デジカメで撮った画像をどうやって整理しようかと考えて、ファイル名先頭に日付時刻文字列を付ければ時系列で並ぶから扱いやすいかなと思って運用してみた。良い感じなので継続。
やり方としては、Python で書いた。デジカメ画像ファイルは、ファイルの最終修正時間=撮影した日付、とみなせる(と思う)ので、各ファイルから最終修正時間さえ取り出さればいい。os.stat(ファイルパス).st_mtime
で取れる。
使い方
- デジカメ画像が放り込まれてるフォルダに cd する
- 下記スクリプトを
python XXXXX.py
と実行する(XXXXXはスクリプト名)
スクリプト(Python2)
- カレントディレクトリに存在する jpg or png をターゲットにする
- このターゲット達のファイル名を本当に変えますか?と確認して、y を入力したら実行する感じ
# -*- coding: utf-8 -*- import datetime import os import sys def abort(msg): print msg exit(1) def get_directory(path): return os.path.dirname(path) def get_filename(path): return os.path.basename(path) def get_basename(path): return os.path.splitext(get_filename(path))[0] def get_extension(path): return os.path.splitext(get_filename(path))[1] def filepath_to_datetimestr(filepath): timestamp = os.stat(filepath).st_mtime dt = datetime.datetime.fromtimestamp(timestamp) return dt.strftime('%y%m%d_%H%M%S') curdir = os.getcwd() filenames = os.listdir(curdir) valid_exts = ['.jpg', '.png'] filenames = [fn for fn in filenames if get_extension(fn.lower()) in valid_exts] filecount = len(filenames) if filecount==0: abort('No image files.') def image_to_dt(curdir, filenames, enable=False): for i in range(filecount): filename = filenames[i] fullpath = os.path.join(curdir, filename) datetimestr = filepath_to_datetimestr(fullpath) # 秒単位でファイル名にしてるから被ることはないやろ. # (1秒に2枚以上撮るとか連射しない限りは無理なはず) # ... というわけで既存なら連番増やす, なんて対応はしない. before_name = filename after_name = '%s%s' % (datetimestr, get_extension(filename)) if enable: old = fullpath new = os.path.join(curdir, after_name) os.rename(old, new) else: print '%s -> %s' % (before_name, after_name) image_to_dt(curdir, filenames, enable=False) print '%d items, do rename?' %filecount print '>', try: res = raw_input() except EOFError: res = None if not res in ['y', 'yes']: abort('Canceled.') image_to_dt(curdir, filenames, enable=True) print 'fin.'