ライブラリ名とかよく忘れるので.
注意:
このまんま実行しちゃダメ.
実際にはipythonで書いて,該当する方のループだけ実行するとか工夫すること.
import time
import datetime
import os
import re
import time
from PIL import Image
from PIL.ExifTags import TAGS
# 共通部
dname = 'dirname'
def update_time(f, t):
os.utime(f, (t, t))
# ファイル名から取得できる場合
pat = re.compile('(?P<date>\d{8}).*(?P<time>\d{6})') # yyyymmdd_hhmmss
#pat = re.compile('(?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}\.\d{2}\.\d{2})') # yyyy-mm-dd hh.mm.ss
for f in os.listdir(dname):
mat = pat.search(dname + '/' + f)
if mat:
dt = datetime.datetime.strptime('-'.join(mat.groups()),'%Y%m%d-%H%M%S')
#dt = datetime.datetime.strptime('-'.join(mat.groups()),'%Y-%m-%d-%H.%M.%S')
update_time(dname + '/' + f, time.mktime(dt.timetuple()))
else:
continue
# ファイル名は単なる通番の場合
def created_on(fname):
im = Image.open(fname)
try:
exif = im._getexif()
except AttributeError:
return None
for tag_id, value in exif.items():
tag = TAGS.get(tag_id, tag_id)
if tag == 'DateTimeDigitized':
dt = [map(int, t.split(':')) for t in value.split(' ')]
return datetime.datetime(*(list(dt[0])+list(dt[1])))
else:
# DateTimeDigitizedがない場合
return None
for fname in os.listdir(dname):
dt = created_on(dname + '/' + fname)
if dt is None:
continue
else:
update_time(dname + '/' + fname, time.mktime(dt.timetuple()))