# Adding comment from datetime import datetime import os import re import sys import glob import time import getopt import piexif import shutil import logging help_str = "-i Input Directory\n-o Output Directory\n-m My Pre-Configured Directory Layout\nDefaults directory to PWD" logging.basicConfig(filename='example.log', level=logging.INFO) try: opts, args = getopt.getopt(sys.argv[1:], "hi:o:m", ["help", "indir=", "outdir="]) except getopt.GetoptError as err: print(str(err) + f"\n{help_str}") sys.exit(2) indir = "." outdir = "." myformat = False for o, a in opts: if o in ("-h", "--help"): print(help_str) exit(1) elif o in ("-i", "--indir"): if a.find('/') == 0 or a.find("./") == 0 or a.find("../") == 0: indir = a else: indir = "./" + a elif o in("-o", "--outdir"): if a.find('/') == 0 or a.find("./") == 0 or a.find("../") == 0: outdir = a else: outdir = "./" + a elif o == "-m": myformat = True logging.info("Input Dir = " + indir) logging.info("Output Dir = " + outdir) logging.info(("Using" if myformat else "Not Using") + " pre formated directories") folderDate0 = datetime(1800, 1, 1, 0, 0, 0) folderDate1 = datetime(1900, 1, 1, 0, 0, 0) folderDate2 = datetime(1950, 1, 1, 0, 0, 0) folderDate3 = datetime(1980, 1, 1, 0, 0, 0) folderDate4 = datetime(1990, 1, 1, 0, 0, 0) folderDate5 = datetime(1995, 1, 1, 0, 0, 0) folderDate6 = datetime(2000, 1, 1, 0, 0, 0) folderDate7 = datetime(2010, 1, 1, 0, 0, 0) for fullpath in glob.glob(indir + "/*.jpg"): logging.info("==========") logging.info("fullpath: " + fullpath) filename = os.path.basename(fullpath) try: namedate = filename.split("_")[0] date = datetime.strptime(namedate, "%Y%m%d") strdate = date.strftime("%Y:%m:%d %H:%M:%S") except Exception as err: logging.error(f"File name not compatable: {filename} :: {err}") continue try: exif_dict = piexif.load(fullpath) logging.debug(exif_dict) exif_dict["0th"][piexif.ImageIFD.DateTime]=strdate exif_dict["Exif"][piexif.ExifIFD.DateTimeOriginal]=strdate exif_dict["Exif"][piexif.ExifIFD.DateTimeDigitized]=strdate exif_bytes=piexif.dump(exif_dict) piexif.insert(exif_bytes, fullpath) modTime = time.mktime(date.timetuple()) os.utime(fullpath, (modTime, modTime)) exif_dict = piexif.load(fullpath) logging.debug(exif_dict) copy = False endyear = 2006 foldername = outdir if myformat: if date > folderDate7: logging.error("Year too great: " + str(date.year)) continue elif date < folderDate0: logging.error("Year too early: " + str(date.year)) continue if date < folderDate1: foldername = "1800-1899" elif date < folderDate2: foldername = "1900-1949" elif date < folderDate3: foldername = "1950-1979" elif date < folderDate4: foldername = "1980-1990" elif date < folderDate5: foldername = "1990-1994" elif date < folderDate6: foldername = "1995-1999" else: foldername = date.year foldername = foldername + str(foldername) logging.info(f"Outfolder: {foldername}") if not os.path.isdir(foldername): os.mkdir(foldername) dest = foldername + "/" + filename while os.path.exists(dest): parts = re.split("[_\.]", filename) parts[1] = int(parts[1]) + 1 filename = "%s_%02d.%s" % (parts[0], parts[1], parts[2]) dest = foldername + "/" + filename shutil.copyfile(fullpath, dest) os.utime(dest, (modTime, modTime)) except Exception as err: logging.error(f"Bad file format for {filename} :: {err}") continue