dashcam-transfer/restructure.py

134 lines
4 KiB
Python

#!/usr/bin/env python3
"""Herstructureer /mnt/ultratouch/dashcam naar uniforme front/rear structuur."""
import os
import re
import shutil
import sys
CAMERA_MAP = {"F": "front", "B": "rear"}
CAMERA_PATTERN = re.compile(r"\.MP4$", re.IGNORECASE)
# Match bestandsnaam zoals 20260304073341_0000023F.MP4
FILE_PATTERN = re.compile(
r"^(\d{8})\d{6}_\d+([FB])\.MP4$", re.IGNORECASE
)
DASHCAM = "/mnt/ultratouch/dashcam"
# === 1. Rename chauffeur → front, weg → rear ===
def rename_old_subdirs():
renamed = 0
for entry in sorted(os.listdir(DASHCAM)):
date_dir = os.path.join(DASHCAM, entry)
if not os.path.isdir(date_dir) or not re.match(r"^\d{8}$", entry):
continue
for old_name, new_name in [("chauffeur", "front"), ("weg", "rear")]:
old_path = os.path.join(date_dir, old_name)
new_path = os.path.join(date_dir, new_name)
if os.path.isdir(old_path) and not os.path.isdir(new_path):
shutil.move(old_path, new_path)
print(f"Hernoemd: {old_path} → {new_path}")
renamed += 1
if renamed == 0:
print("Geen 'chauffeur' of 'weg' mappen gevonden om te hernoemen.")
else:
print(f"{renamed} mappen hernoemd.")
return renamed
# === 2. Splits platte bestanden in front/rear submappen ===
def sort_flat_files():
total_moved = 0
for entry in sorted(os.listdir(DASHCAM)):
date_dir = os.path.join(DASHCAM, entry)
if not os.path.isdir(date_dir) or not re.match(r"^\d{8}$", entry):
continue
# Alleen mappen zonder front/rear subdirs
has_front = os.path.isdir(os.path.join(date_dir, "front"))
has_rear = os.path.isdir(os.path.join(date_dir, "rear"))
if has_front or has_rear:
continue
files = [
f for f in os.listdir(date_dir)
if FILE_PATTERN.match(f)
]
if not files:
continue
print(f"\nVerwerk platte bestanden in {entry} ...")
for fname in files:
match = FILE_PATTERN.match(fname)
if not match:
continue
date_str, cam_suffix = match.group(1), match.group(2).upper()
cam_dir = CAMERA_MAP.get(cam_suffix)
if not cam_dir:
continue
target_dir = os.path.join(date_dir, cam_dir)
os.makedirs(target_dir, exist_ok=True)
src = os.path.join(date_dir, fname)
dst = os.path.join(target_dir, fname)
if os.path.exists(dst):
print(f" Overslaan (bestaat al): {dst}")
continue
shutil.move(src, dst)
print(f" {fname} → {cam_dir}/")
total_moved += 1
if total_moved:
print(f"\n{total_moved} bestanden gesorteerd in front/rear mappen.")
else:
print("\nGeen platte bestanden gevonden om te sorteren.")
return total_moved
# === 3. Controleer of er nog afwijkingen zijn ===
def check_missers():
issues = []
for entry in sorted(os.listdir(DASHCAM)):
date_dir = os.path.join(DASHCAM, entry)
if not os.path.isdir(date_dir) or not re.match(r"^\d{8}$", entry):
continue
front = os.path.isdir(os.path.join(date_dir, "front"))
rear = os.path.isdir(os.path.join(date_dir, "rear"))
if not (front and rear):
issues.append(f" {entry}: heeft niet beide front+rear subdirs")
# Check of er nog MP4's direct in de date map liggen
files = [
f for f in os.listdir(date_dir)
if FILE_PATTERN.match(f)
]
if files:
issues.append(f" {entry}: {len(files)} MP4 direct in datum-map (niet in front/rear)")
if issues:
print("\n=== Afwijkingen ===")
for i in issues:
print(i)
else:
print("\n✅ Alle mappen hebben de juiste structuur.")
def main():
print("=== Dashcam herstructurering ===")
print(f"Doel: {DASHCAM}\n")
rename_old_subdirs()
sort_flat_files()
check_missers()
if __name__ == "__main__":
main()