from app import FileUtils from app import ImageUtils from app import Rules # STR_DIR = r"/Users/paulottley/Desktop/SortSource" STR_DIR = r"/Volumes/Elements2TB/Backups/Pictures/images" TGT_DIR = r"/Volumes/MyBook2TB/Backups/SortTarget" for root, dirs, files in os.walk(STR_DIR): for file in files: target_dir = root tgt_folder = FileUtils.get_file_category(file) try: dt, str_dt = ImageUtils.get_dt_from_name(file) if dt is None: print("Zero or None: " + file) target_dir = "{0}{1}{2}{3}".format( root, os.sep, "no_date", os.sep) else: target_dir = "{0}{1}{2}{3}{4}{5}".format( root + os.sep, tgt_folder + os.sep, dt.year,
def get_original_date(filename, deep=False): date_frm_filename = None date_frm_exif_data = None # Images Only date_frm_atom = None # Video Only date_frm_parser = None # Images or Videos path, fn = os.path.split(filename) file_category = FileUtils.get_file_category(fn) # First, see if there is a date in the filename (Easiest and universal) dt_frm_file, str_dt_frm_file = ImageUtils.get_dt_from_name(fn) if dt_frm_file is not None and str_dt_frm_file is not None: date_frm_filename = dt_frm_file # Next, pull a date from the metadata if os.path.isfile(filename): if file_category == Rules.get_img_dir(): try: # First method uses exif and works mainly for images exif = Image.open(filename)._getexif().items() dt = ImageUtils.get_exif_field(filename, exif, 'DateTimeOriginal') if dt is not "NotFound" and dt is not None: date_frm_exif_data = re.sub(r"\D", "", dt.split(" ")[0]) except Exception as err: if Rules.get_debug() is True: print( "get_original_date(): Metadata extraction error: %s" % err) elif file_category == Rules.get_vid_dir(): # First, try Atom Parser if deep is True and os.path.isfile(filename): dt_from_atom = ImageUtils.get_dt_from_atom_parser(filename) if dt_from_atom is not None and \ "0000" not in dt_from_atom and \ CURRENT_YEAR >= int(dt_from_atom[:4]) > Rules.get_oldest_year(): date_frm_atom = re.sub(r"\D", "", dt_from_atom.split(" ")[0]) elif date_frm_exif_data is None and date_frm_atom is None: dt = ImageUtils.get_dt_from_parser(filename) if dt is not None: date_frm_parser = re.sub(r"\D", "", dt.split(" ")[0]) else: print("Not a file: " + str(filename)) return None, None # Finally, compare the two for the most likely one # Earliest date # After 1970 # Not past the current year date_list = [ date_frm_filename, date_frm_exif_data, date_frm_atom, date_frm_parser ] best_date_taken = ImageUtils.get_earliest_date(date_list) return ImageUtils.get_date_obj( best_date_taken) # Date object and string (YYYY-MM-DD)