예제 #1
0
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,
예제 #2
0
    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)