137 lines
4.0 KiB
Python
137 lines
4.0 KiB
Python
# 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
|
|
|