first commit

This commit is contained in:
2025-07-06 14:52:17 +02:00
commit 610e7bb0fe
2 changed files with 81 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.venv

80
main.py Executable file
View File

@ -0,0 +1,80 @@
import os, re, shutil, calendar, datetime
import exifread
match = r'(.*)(\..*)'
root_dir = '/mnt/dati/process'
photos_dir = '/mnt/dati/export/Photos'
videos_dir = '/mnt/dati/export/Videos'
matches = (r'(\d{4})-(\d{2})-(\d{2})', r'(\d{4})(\d{2})(\d{2})')
for root, dirs, files in os.walk(root_dir):
for file in files:
data = os.path.join(root, file)
file_match = re.search(match, data, re.IGNORECASE)
if file_match and file_match.group(2).lower() in ('.jpg', '.jpeg', '.png', '.webp', '.heic'):
with open(data, 'rb') as ph:
foundMatch = False
try:
tags = exifread.process_file(ph)
if tags:
if 'Image DateTime' in tags:
date_taken = str(tags["Image DateTime"]).split()
elif 'EXIF DateTimeOriginal' in tags:
date_taken = str(tags["EXIF DateTimeOriginal"]).split()
year, month, day = map(int, date_taken[0].split(':'))
hour, minute, second = map(int, date_taken[1].split(':'))
date_obj = datetime.datetime(year, month, day, hour, minute, second)
month_dir = os.path.join(os.path.join(photos_dir, str(year)), calendar.month_name[month])
os.makedirs(month_dir, exist_ok=True)
shutil.copyfile(data, os.path.join(month_dir, file))
os.utime(os.path.join(month_dir, file), (date_obj.timestamp(), date_obj.timestamp()))
foundMatch = True
else:
for pattern in matches:
m = re.search(pattern, data)
if m:
year = int(m.group(1))
if year < 2000 or year > 2030:
continue
if re.search(r's100', data):
continue
if re.search(r'Screenshot', data, re.IGNORECASE):
continue
month = int(m.group(2))
day = int(m.group(3))
date_obj = datetime.datetime(year, month, day)
month_dir = os.path.join(os.path.join(photos_dir, str(year)), calendar.month_name[month])
os.makedirs(month_dir, exist_ok=True)
shutil.copyfile(data, os.path.join(month_dir, file))
os.utime(os.path.join(month_dir, file), (date_obj.timestamp(), date_obj.timestamp()))
foundMatch = True
break
except Exception as e:
print(f'Error processing photo {data}: {e}')
if not foundMatch:
print(f'No date pattern found in filename: {data}\n')
elif file_match and file_match.group(2).lower() in ('.mov', '.mp4', '.3gp'):
foundMatch = False
for pattern in matches:
try:
m = re.search(pattern, data)
if m:
year = int(m.group(1))
month = int(m.group(2))
day = int(m.group(3))
if year < 2000 or year > 2030:
continue
date_obj = datetime.datetime(year, month, day)
month_dir = os.path.join(os.path.join(videos_dir, str(year)), calendar.month_name[month])
os.makedirs(month_dir, exist_ok=True)
shutil.copyfile(data, os.path.join(month_dir, file))
os.utime(os.path.join(month_dir, file), (date_obj.timestamp(), date_obj.timestamp()))
foundMatch = True
break
except Exception as e:
print(f'Error processing video {data}: {e}')
if not foundMatch:
print(f'No date pattern found in filename: {data}\n')