2010-05-01

写了个脚本整理我的照片

上次整理硬盘的时候把我的照片一股脑儿的放在了一个目录下,这次又有闲功夫了,写了个python脚本来处理我的照片。基本思路是使用PIL库读取照片的exif信息,取出拍摄的日期时间,根据日期建立新的文件夹,然后照片文件以日期时间格式命名。批量处理,比较简单。

#!/usr/bin/env python
# -*- coding:gbk -*-
""" 
复制指定目录的照片到目标目录,并且根据照片的拍摄时间进行重命名
比如某张照片拍摄于2008年3月15日12:00:00,则目标目录为2008\\03\\15\\120000.jpg
"""
from PIL import Image
import os, sys

def getdistpath(str, distdir):
    date = str.split(' ')[0].split(':')
    dirs = distdir + os.sep + os.sep.join(date)
    if not os.path.exists(dirs):
        os.makedirs(dirs)
    dirs = dirs + os.sep + ''.join(str.split(' ')[1].split(':')) + '.jpg'
    return dirs

def copyimage(srcdir, distdir):
    for path in [srcdir+os.sep+i for i in os.listdir(srcdir)]:
        if os.path.isdir(path):
            copyimage(path, distdir)
        else:
            writelog(path)
            try:
                image = Image.open(path)
            except:
                logstr = 'file open error:' + path
                writelog(logstr)
            try:
                distpath = getdistpath(image._getexif()[306], distdir)
                logstr = 'distpath:' + distpath
                writelog(logstr)
            except:
                logstr = 'getextif error:' + path
                writelog(logstr)
            try:
                if not os.path.exists(distpath):
                    image.save(distpath)
            except:
                logstr = 'file copy error:' + path
                writelog(logstr)

def writelog(str):
    global logfile
    logfile.write(str+'\n')
    print str

def main():
    if len(sys.argv) == 3:
        global logfile
        logfile = open('cilog.txt', 'w')
        copyimage(sys.argv[1], sys.argv[2])
        logfile.close()
    else:
        print '需要给出两个参数,第一个是照片目录,第二个是目标目录'
        print '例如:', sys.argv[0],'e:\\photo f:\\goodphoto'


if __name__ == '__main__':
    main()

没有评论: