사진 파일(jpg)의 시간을 사진을 찍은 시간으로 변경하는 python script. EXIF.py를 사용한다.
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""jpg 파일 변경 시간을 exif 에서 읽어온 시간으로 변경한다."""
__version__ = '0.1'
import os
import sys
import time
import dircache
import EXIF
# 허가할 확장자 목록
EXTENSIONS = ('.jpg', '.jpeg')
# 사진을 찍은 시간을 얻을 필드. 처음 발견하는 필드를 사용한다.
TAGS = ['Image DateTime', 'EXIF DateTimeOriginal', 'DateTime']
def printUsing():
"""사용 방법을 출력한다.
"""
print sys.argv[0], '<file or directory>'
def EXIFDateTime2time(exifdatetime):
"""exif의 시간 문자열을 time 값으로 변경한다.
@param[in] exifdatetime 시간 문자열
@return 변환된 time 값
"""
return time.mktime(time.strptime(exifdatetime, '%Y:%m:%d %H:%M:%S'))
def correctJPGTime(filename):
"""jpg 파일 변경 시간을 수정한다.
@param[in] filename 수정할 파일 이름
"""
fnl = filename.lower()
for ext in EXTENSIONS:
# 파일 확장자 검사
if fnl.endswith(ext):
f = file(filename, 'rb')
# exif tag를 읽는다.
tags = EXIF.process_file(f, details=False)
for key in TAGS:
if key in tags:
# TAGS 중 처음 발견한 tag의 시간 값을 사용한다.
exif_time = EXIFDateTime2time(str(tags[key]))
statinfo = os.stat(filename)
if exif_time != statinfo.st_mtime:
# 시간이 다르면 파일 시간을 변경한다.
os.utime(filename, (statinfo.st_atime, exif_time))
print 'fix:', filename
break
break
def main():
if os.path.isdir(sys.argv[1]):
# 주어진 인자가 디렉토리면
for name in dircache.listdir(sys.argv[1]):
# 디렉토리의 파일들에 대해서 수정 작업을 한다.
# sub directory에 대해서는 아무 작업도 하지 않는다.
fullname = sys.argv[1] + os.path.sep + name
if os.path.isfile(fullname):
correctJPGTime(fullname)
elif os.path.isfile(sys.argv[1]):
# 주어진 인자가 파일이면
correctJPGTime(sys.argv[1])
if __name__ == '__main__':
if len(sys.argv) < 2:
printUsing()
sys.exit(1)
main()