process_camera_photos/organize_photos.py

66 lines
1.8 KiB
Python

# organize_photos.py
#
# author: deng
# date : 20240121
from shutil import move
from pathlib import Path
from pathlib import PosixPath
from argparse import ArgumentParser
import exifread
from rich.progress import track
def main(image_dir: PosixPath, extensions: str) -> None:
"""Gather photos by their created dates
Args:
image_dir (PosixPath): dir of images
extensions (str): extensions of photo
"""
image_paths = [path for path in image_dir.glob(extensions) if path.is_file()]
for image_path in track(image_paths, 'Move images ...'):
with open(image_path, 'rb') as f:
exif_data = exifread.process_file(f)
try:
image_datetime = exif_data['Image DateTime']
except KeyError:
print(f'Can not find ImageDateTime tag on this image: {image_path}')
continue
image_date, _ = str(image_datetime).split()
image_date = image_date.replace(':', '-')
image_date_dir = image_dir.joinpath(image_date)
if not image_date_dir.is_dir():
image_date_dir.mkdir()
print(f'Dir created: {image_date_dir}')
src = image_path
dst = image_date_dir.joinpath(image_path.name)
move(src=src, dst=dst)
if __name__ == '__main__':
parser = ArgumentParser()
parser.add_argument('-i', '--image_dir', help='Your image dir', type=str)
parser.add_argument('-e', '--extensions', help='Image extensions', type=str)
args = parser.parse_args()
image_dir = args.image_dir
extensions = args.extensions
if not image_dir:
# for pyinstaller use case
image_dir = Path(__file__).parent.parent
else:
image_dir = Path(image_dir)
if not extensions:
extensions = '*.[pPjJrRhHoO][nNpPaAeErR][gGeEwWiIfF]*'
main(image_dir=image_dir, extensions=extensions)