晚上媳妇儿整理儿子照片,整理了一部分说太累了;问她还有多少没整理,说还有几十个G…问怎么整理,说把图片根据生日按月份分开;我一听,明显是个小脚本就搞定的事情;虽然没怎么太写过python,不过撸起袖子就是干;一边查一边写,轻松搞定;一条命令,几十个G图片一会儿就分好了;媳妇儿很开心;
会写代码的意义不一定在于非要做多大的项目,生活中有些重复的体力活,写个脚本一劳永逸,其余的时间开开心心发呆也很好;
附代码,规范性差了点,自用轻拍;
1 # -*- coding: UTF8 -*- 2 3 import os 4 import time 5 import exifread 6 import shutil 7 import sys 8 9 # 生日分隔日期 10 BIRTHDAY = 7 11 12 # 原图片目录 13 ORIGINAL_DIR = 'original' 14 15 # 分类结果目录 16 CLASSIFY_DIR = 'classify' 17 18 19 20 # 获取图片时间 21 def getImageTime(imagePath): 22 FIELD = 'EXIF DateTimeOriginal' 23 fd = open(imagePath,'rb') 24 tags = exifread.process_file(fd) 25 fd.close() 26 # 有拍摄时间优先使用拍摄时间 27 if FIELD in tags: 28 imageTime = str(tags[FIELD]).replace(':', '-')[:10] 29 return imageTime 30 else: 31 state = os.stat(imagePath) 32 imageTime = time.strftime('%Y-%m-%d', time.localtime(state[-2])) 33 return imageTime 34 35 36 37 # 00.简单检查下待处理图片目录 38 if not os.path.exists(ORIGINAL_DIR): 39 print('请将图片文件夹复制到original目录下') 40 sys.exit(-1) 41 42 # 01.创建分类目录 43 if os.path.exists(CLASSIFY_DIR): 44 shutil.rmtree(CLASSIFY_DIR) 45 os.mkdir(CLASSIFY_DIR) 46 47 # 02.遍历当前目录下的图片目录 48 for root, dirs, files in os.walk(ORIGINAL_DIR): 49 for image in files: 50 # 拼接文件路径 51 imagePath = os.path.join(root, image) 52 print(imagePath) 53 54 # 获取文件时间 55 imageTime = getImageTime(imagePath) 56 57 year = int(imageTime[:4]) 58 month = int(imageTime[5:7]) 59 day = int(imageTime[-2:]) 60 61 # 以生日做分隔,小于7号的归到上个月 62 if (day < BIRTHDAY): 63 month -= 1 64 # 1月归档到上个月,需要退年 65 if (month == 0): 66 year -= 1 67 month = 12 68 69 # 生成该图片需要存储的目录 70 t = (year, month, BIRTHDAY + 1, 0, 0, 0, 0, 0, 0) 71 newTime = time.mktime(t) 72 newImageDirName = time.strftime('%Y-%m-%d', time.gmtime(newTime)) 73 newImageDir = os.path.join(CLASSIFY_DIR, newImageDirName) 74 75 # 如果目标目录不存在则创建 76 if not os.path.exists(newImageDir): 77 os.mkdir(newImageDir) 78 79 dstImagePath = os.path.join(newImageDir, image) 80 81 # 拷贝文件 82 shutil.copy2(imagePath, dstImagePath)