python脚本:按拍摄日期归类照片

转载 http://blog.csdn.net/lanbing510/article/details/48633427

在原文基础上添加适当注释。

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
# -*- coding: gbk -*-
"""
功能:对照片按照拍摄时间(年.月)进行归类
使用方法:将脚本和照片放于同一目录,双击运行脚本即可
作者:冰蓝
"""
import shutil
import os
import time
import exifread
class ReadFailException(Exception):
pass
# 获取原始日期
def getOriginalDate(filename):
try:
fd = open(filename, 'rb')
except:
raise ReadFailException, "unopen file[%s]\n" % filename
data = exifread.process_file( fd )
if data:
try:
t = data['EXIF DateTimeOriginal']
return str(t).replace(":",".")[:7]
except:
pass
# 如果无法读取到EXIF信息,则使用文件系统信息 - 时间
state = os.stat(filename)
return time.strftime("%Y.%m", time.localtime(state[-2]))
# 归类图片
def classifyPictures(path):
for root,dirs,files in os.walk(path,True):
dirs[:] = []
for filename in files:
filename = os.path.join(root, filename)
f,e = os.path.splitext(filename)
# 不是以下后缀名的文件,不做处理
if e.lower() not in ('.jpg','.png','.mp4'):
continue
info = "文件名: " + filename + " "
t=""
try:
t = getOriginalDate( filename )
except Exception,e:
print e
continue
info = info + "拍摄时间:" + t + " "
pwd = root +'\\'+ t
dst = pwd + '\\' + filename
# 如果目录不存在,则创建目录
if not os.path.exists(pwd ):
os.mkdir(pwd)
print info, dst
# 利用shell 的copy功能
shutil.copy2( filename, dst )
# 删除文件
os.remove( filename )
if __name__ == "__main__":
path = "."
classifyPictures(path)

参考资料

[1] 按拍摄日期归类照片 一键搞定 Python