Fly to the sky & Return

Exfread를 이용한 EXIF data 추출 및 날짜별 폴더 생성해서 사진 옮기기 본문

프로그래밍/파이썬

Exfread를 이용한 EXIF data 추출 및 날짜별 폴더 생성해서 사진 옮기기

낼은어떻게 2017. 12. 22. 09:42
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

기존에 만들었던 코드는 PIL 를 이용해서  EXIF data를 추출해쓴뎅 2.7버전에서만 작동을 하는듯해서 3.6 버전에서도 동작가능한 넘으로 다시 만들어 봤습니당



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from tkinter import Tk
from tkinter import filedialog
import os
import exifread
import time
import datetime
 
 
DT_TAGS = ["Image DateTime""EXIF DateTimeOriginal""DateTime"]
DEBUG = 0
 
def get_exif_date_exif(path):
    """return EXIF datetime using exifread (formerly EXIF)"""
    dt_value = None
    f = open(path, 'rb')
    try:
        tags = exifread.process_file(f)
        if DEBUG:
            print('tags cnt: %d' % len(tags))
            print('\n'.join(tags))
        for dt_tag in DT_TAGS:
            try:
                dt_value = '%s' % tags[dt_tag]
                if DEBUG:
                    print('%s: %s' % (dt_tag, dt_value))
                break
            except:
                continue
            
        if dt_value:
            exif_time = time.strptime(dt_value + 'UTC''%Y:%m:%d %H:%M:%S%Z')
            
            return exif_time
    finally:
        f.close()
    return None
        
    
 
#return 날짜 데이터가 2010-10-1 요런 형식이여서 2010-10-01로 바꾸는 함수
def day_check(exif_day):
    if len(str(exif_day.tm_mday)) == 1:
        day = "0"+ str(exif_day.tm_mday)
    else:
        day = str(exif_day.tm_mday)
        
    return day
 
root = Tk()
root.withdraw()
 
myPath = filedialog.askdirectory()
 
for f in os.listdir(myPath):
    k=f.lower()
    total_path = myPath +'/'+ k
    
    exif_time = get_exif_date_exif(total_path)
 
 
    dday = day_check(exif_time)
 
    exif_date = str(exif_time.tm_year)+"_"+str(exif_time.tm_mon) +"_"+ dday
    
    if not os.path.exists(myPath+'/'+exif_date):
        os.makedirs(myPath+'/'+ exif_date)

    old_file = os.path.join(myPath, k)
    new_file = os.path.join(myPath+'/'+ exif_date, k)
    os.rename(old_file, new_file)
 
    
cs