introduced a separation of jpgs by the month the picture has been taken. therefore first the exif fields are used. if they do not exist, the creation date of the file is taken

This commit is contained in:
Lukas Hahmann 2015-09-17 20:29:05 +02:00
parent 6e78b184ee
commit 7b3c90a6d3
1 changed files with 57 additions and 5 deletions

View File

@ -4,10 +4,56 @@ import os.path
import shutil
import sys
import time
import exifread
source = sys.argv[1]
destination = sys.argv[2]
def get_minimum_creation_time(exif_data):
creationTime = None
dateTime = exif_data.get('DateTime')
dateTimeOriginal = exif_data.get('EXIF DateTimeOriginal')
dateTimeDigitized = exif_data.get('EXIF DateTimeDigitized')
if dateTime is not None :
creationTime = dateTime
if dateTimeOriginal is not None and (creationTime == None or dateTimeOriginal < creationTime):
creationTime = dateTimeOriginal
if dateTimeDigitized is not None and (creationTime == None or dateTimeDigitized < creationTime):
creationTime = dateTimeDigitized
return creationTime
def postprocess_image(sourceDir, imageDirectory, fileName):
imagePath = os.path.join(sourceDir, fileName)
image = open(imagePath, 'rb')
exifTags = exifread.process_file(image)
creationTime = get_minimum_creation_time(exifTags)
# distinct different time types
if creationTime is None:
creationTime = time.gmtime(os.path.getctime(imagePath))
else:
creationTime = time.strptime(str(creationTime), "%Y:%m:%d %H:%M:%S")
print time.asctime(creationTime)
year = time.strftime("%Y", creationTime)
month = time.strftime("%m")
yearPath = os.path.join(imageDirectory, year)
if not os.path.exists(yearPath):
os.mkdir(yearPath)
monthPath = os.path.join(yearPath, month)
if not os.path.exists(monthPath):
os.mkdir(monthPath)
shutil.copy(imagePath, os.path.join(monthPath, file))
while not os.path.exists(source):
source = raw_input('Enter a valid source directory\n')
while not os.path.exists(destination):
@ -16,13 +62,19 @@ while not os.path.exists(destination):
for root, dirs, files in os.walk(source, topdown=False):
for file in files:
extension = os.path.splitext(file)[1][1:].upper()
destinationPath = os.path.join(destination,extension)
path = os.path.join(root,file)
destinationPath = os.path.join(destination, extension)
if not os.path.exists(destinationPath):
os.mkdir(destinationPath)
if os.path.exists(os.path.join(destinationPath,file)):
print("WARNING: this file was not copied :" + os.path.join(root,file))
shutil.move(os.path.join(root,file), os.path.join(destination, extension, str(time.time()) + file))
if extension == "JPG":
postprocess_image(root, destinationPath, file)
print "sorted jpg"
else:
shutil.move(os.path.join(root,file), destinationPath)
if os.path.exists(os.path.join(destinationPath,file)):
print("WARNING: this file was not copied :" + os.path.join(root,file))
shutil.copy(os.path.join(root,file), os.path.join(destination, extension, str(time.time()) + file))
else:
shutil.copy(os.path.join(root,file), destinationPath)