최상단

컨텐츠

[util] 사진파일을 날짜별로 정리하기.

글 정보

Category
컴퓨터 이야기
2013. 8. 12. 18:08

본문

카메라로 사진을 찍으면, 날짜별로 폴더가 생성되서 사진을 날짜별로 정리하기가 쉬운데,

요즘 휴대폰으로 사진을 찍다보니 날짜별로 정리가 안된다.


뷰어의 힘을 빌려 그냥 볼까 하다가, 그것도 딱히 맘에 들지 않아, 

결국, python으로 만들었다.


EXIF 정보가 있으면 그 정보를 이용하여 날짜별로 디렉토리를 생성하여 복사.

EXIF 정보가 없으면, 파일명에서 유추하여 날짜별로 복사.

둘다 실패하는 경우 그냥 Unknown 폴더로 복사.


하도록 하였다.


exif 정보를 읽기위해서는 exif-py-1.3.3 을 사용하였다.



  1. #!/usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3. #  
  4.   
  5.   
  6. import sys  
  7. import getopt  
  8. import logging    
  9. import timeit  
  10. import os  
  11. import shutil  
  12. import re  
  13. from exifread.tags import DEFAULT_STOP_TAG, FIELD_TYPES  
  14. from exifread import process_file  
  15.   
  16. def using():  
  17.     print "cmd src dest"  
  18.   
  19. def copyfile(dst, datefolder, orgfile):  
  20.     dstfolder = os.path.join(dst, datefolder)  
  21.     if not os.path.exists(dstfolder) :  
  22.         os.makedirs(dstfolder)  
  23.     shutil.copycopy(orgfile, dstfolder)  
  24.     print "Copy " + orgfile + " To " + dstfolder  
  25.   
  26.   
  27. def estimateDateByFileName(fname) :  
  28.     #checker = re.compile(r'\d{4}\d{2}\d{2}')  
  29.     checker = re.compile(r'(19|20\d\d)[-_ ]?(0[1-9]|1[012])[-_ ]?(0[1-9]|[12][0-9]|3[01])')  
  30.     m = checker.search(fname)  
  31.   
  32.     if m  :  
  33.         print m.groups()  
  34.         #print m.group(0)  
  35.         return m.group(1)+"_"+m.group(2)+"_"+m.group(3)  
  36.     else :  
  37.         return "unknown"  
  38.   
  39.   
  40. def main():  
  41.     if len(sys.argv) < 3 :  
  42.         using()  
  43.         sys.exit(0)  
  44.   
  45.     src = sys.argv[1]  
  46.     dst = sys.argv[2]  
  47.   
  48.     for f in os.listdir(src) :  
  49.         print f  
  50.         ff = os.path.join(src, f)  
  51.         if os.path.isfile(ff) :  
  52.             ef = open(ff, 'rb')  
  53.             tags = process_file(ef, stop_tag = 'EXIF DateTimeOriginal')  
  54.             if not tags :  
  55.                 datefolder = estimateDateByFileName(f)  
  56.                 copyfile(dst, datefolder, ff)  
  57.                 continue  
  58.             """ 
  59.             for tag in tags.keys(): 
  60.                 if tag not in ('JPEGThumbnail', 'TIFFThumbnail', 'Filename', 'EXIF MakerNote'): 
  61.                     print "Key: %s, value %s" % (tag, tags[tag]) 
  62.             """  
  63.             try :  
  64.                 oriTime = str(tags["EXIF DateTimeOriginal"]).split(" ")[0].split(":")  
  65.                 #print oriTime[0], oriTime[1], oriTime[2]  
  66.                 datefolder = oriTime[0]+"_"+oriTime[1]+"_"+oriTime[2]  
  67.                 #print datefolder  
  68.                 copyfile(dst, datefolder, ff)  
  69.                    
  70.                 ef.close()  
  71.             except :  
  72.                 datefolder = estimateDateByFileName(f)  
  73.                 copyfile(dst, datefolder, ff)  
  74.   
  75.   
  76.   
  77.   
  78. if __name__ == '__main__':  
  79.     main()  


python을 사용하시는 분은 소스파일을 다운 받아 사용하시고, 아니신 분들은 exe 파일을 다운 받아 사용하시면 됩니다.


사용방법은 cmd창에서


makeFolderByEXIF.exe "[소스폴더]" "[대상폴더]"


입니다.



2012-12-24 00.22.26.png

20120714_153524.jpg

P20120516_165526000_21196233-5803-4182-AD41-9D3E4FD7CEB4.PNG

V20120501_230422000_E369AB99-8CEE-4182-865F-0B23B54EF9A9.mp4

VID_20130201_075752.mp4


위와 같은 패턴들에 대하여 잘 동작하는 것 까지 확인했음.




makeFolderByEXIF.exe


makeFolderByEXIF.py




================================== UPDATE

Google의 picasa에서 디렉토리 명이 아니라 생성 날짜를 보고 정렬을 해줘서...

디렉토리 생성 시 생성 날짜를 변경하도록 변경.


makeFolderByEXIF.exe


makeFolderByEXIF.py





트랙백과 댓글 여닫기

TOP