#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2025/11/21 23:39:06 +0900> """ カレントディレクト内のjpeg画像のExifを読み取って、 日付別でディレクトリを作成してファイル移動するスクリプト。 Windows11 x64 25H2 + Python 3.10.10 64bit """ import glob import os from PIL import Image from PIL.ExifTags import TAGS import shutil def get_jpeg_shooting_date(image_path: str) -> str: EXIFTAGS = ["DateTimeOriginal", "DateTimeDigitized", "DateTime"] exif_tag_map = {v: k for k, v in TAGS.items()} try: im = Image.open(image_path) exif_data = im._getexif() if exif_data is None: print(f"Not found Exif : {image_path}") return None for tagname in EXIFTAGS: tag_id = exif_tag_map.get(tagname) if tag_id in exif_data: return exif_data[tag_id] return None except FileNotFoundError: print(f"Not found '{image_path}'") except Exception as e: print(f"Error: {e}") return None def get_jpeg_files() -> list: jpg_files = glob.glob("*.jpg") jpeg_files = glob.glob("*.jpeg") JPG_files = glob.glob("*.JPG") JPEG_files = glob.glob("*.JPEG") return list(set(jpg_files + jpeg_files + JPG_files + JPEG_files)) def make_dir(dirname: str): if os.path.isdir(dirname): # print(f" Skip. Exist directory : {dirname}") pass else: print(f"Create directory '{dirname}'") try: os.mkdir(dirname) except FileExistsError as e: print(f"Error : Exist directory : {e}") except FileNotFoundError as e: print(f"Error : Directory not found : {e}") def main(): filelist = get_jpeg_files() if len(filelist) <= 0: print("Jpeg files not found.") return print(f"Jpeg {len(filelist)} files found.") for fn in filelist: datetime = get_jpeg_shooting_date(fn) if datetime is None: datetime = "Not found Exif" dirname = "" else: s = datetime.split(" ")[0] dirname = s.replace(":", "") print(f"Found '{fn}' ({datetime})") if dirname != "": # Create directory make_dir(dirname) newfn = os.path.join(dirname, fn) if os.path.exists(newfn): print(f"'{newfn}' already exists. Skipping.") else: # move file new_path = shutil.move(fn, dirname) print(f"Moved to '{new_path}'") if __name__ == "__main__": main()