init
This commit is contained in:
65
organize_photos.py
Normal file
65
organize_photos.py
Normal file
@ -0,0 +1,65 @@
|
||||
# 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 = '*.[pPjJrRhH][nNpPaAeE][gGeEwWiI]*'
|
||||
|
||||
main(image_dir=image_dir, extensions=extensions)
|
||||
Reference in New Issue
Block a user