104 lines
3.6 KiB
Python
104 lines
3.6 KiB
Python
import sys, os, datetime
|
|
from stat import *
|
|
import pyexiv2
|
|
def getsubs(dir):
|
|
dirs = []
|
|
files = []
|
|
for dirname, dirnames, filenames in os.walk(dir):
|
|
dirs.append(dirname)
|
|
for subdirname in dirnames:
|
|
dirs.append(os.path.join(dirname, subdirname))
|
|
for filename in filenames:
|
|
files.append(os.path.join(dirname, filename))
|
|
return dirs, files
|
|
|
|
cur_dir = os.path.abspath(os.curdir)
|
|
main_dir = cur_dir
|
|
|
|
dirs_all, files_all = getsubs(cur_dir)
|
|
#files = os.listdir(cur_dir)
|
|
files = files_all
|
|
for f in files:
|
|
FLAG_NOT_RENAME = 1
|
|
|
|
sPathFile=os.path.join(cur_dir, f)
|
|
nFileName = os.path.basename(sPathFile)
|
|
if nFileName == 'sort.py':
|
|
print "1", FLAG_NOT_RENAME, f
|
|
FLAG_NOT_RENAME = 0
|
|
metadata = pyexiv2.ImageMetadata(f)
|
|
try:
|
|
metadata.read()
|
|
try:
|
|
if len(metadata.exif_keys)==0:
|
|
#print datetime.datetime.fromtimestamp(metadata._atime)
|
|
tag = datetime.datetime.fromtimestamp(metadata._mtime)
|
|
date = str(tag.day)
|
|
month = str(tag.month)
|
|
year = str(tag.year)
|
|
else:
|
|
if 'Exif.Image.DateTime' in metadata.exif_keys:
|
|
tag = metadata['Exif.Image.DateTime']
|
|
date = tag.raw_value[8:-9]
|
|
month = tag.raw_value[5:-12]
|
|
year = tag.raw_value[:4]
|
|
elif 'Exif.Photo.DateTimeDigitized' in metadata.exif_keys:
|
|
tag = metadata['Exif.Photo.DateTimeDigitized']
|
|
date = tag.raw_value[8:-9]
|
|
month = tag.raw_value[5:-12]
|
|
year = tag.raw_value[:4]
|
|
else:
|
|
tag = datetime.datetime.fromtimestamp(metadata._mtime)
|
|
date = str(tag.day)
|
|
month = str(tag.month)
|
|
year = str(tag.year)
|
|
if year == '0000':
|
|
tag = datetime.datetime.fromtimestamp(metadata._mtime)
|
|
date = str(tag.day)
|
|
month = str(tag.month)
|
|
year = str(tag.year)
|
|
except KeyError:
|
|
FLAG_NOT_RENAME = 0
|
|
print "2", FLAG_NOT_RENAME, f, metadata
|
|
except IOError:
|
|
#tag = time.ctime(os.path.getmtime(f))
|
|
tag = datetime.datetime.fromtimestamp(os.stat(f).st_mtime)
|
|
date = str(tag.day)
|
|
month = str(tag.month)
|
|
year = str(tag.year)
|
|
print "3", FLAG_NOT_RENAME, f
|
|
if FLAG_NOT_RENAME == 1:
|
|
#dtFile=datetime.date.fromtimestamp(os.stat(sPathFile)[ST_CTIME])
|
|
#print "Path: ", sPathFile, dtFile.strftime("%d.%m.%Y")
|
|
print "ok", FLAG_NOT_RENAME, f
|
|
|
|
|
|
try:
|
|
os.makedirs(main_dir+'/'+year)
|
|
except OSError:
|
|
pass
|
|
try:
|
|
os.makedirs(main_dir+'/'+year+'/'+month)
|
|
except OSError:
|
|
pass
|
|
try:
|
|
os.makedirs(main_dir+'/'+year+'/'+month + '/' + date)
|
|
except OSError:
|
|
pass
|
|
oldDst = sPathFile
|
|
newDst = (main_dir+'/'+year+'/'+month + '/' + date + '/' + nFileName)
|
|
|
|
def recurs_name(file_name):
|
|
try:
|
|
newDst = (main_dir+'/'+year+'/'+month + '/' + date + '/' +'_'+ file_name)
|
|
os.rename( oldDst, newDst)
|
|
except OSError:
|
|
recurs_name('_'+ file_name)
|
|
|
|
try:
|
|
os.rename( oldDst, newDst )
|
|
except OSError:
|
|
try:
|
|
recurs_name(nFileName)
|
|
except OSError:
|
|
pass |