import hashlib import csv from pathlib import Path BASE = Path(__file__).resolve().parent.parent / "temp" / "media" def sha1_of_file(path: Path, buf_size: int = 65536) -> str: """Calcula el SHA1 de un fichero binario.""" h = hashlib.sha1() with path.open("rb") as f: while True: chunk = f.read(buf_size) if not chunk: break h.update(chunk) return h.hexdigest() def main() -> None: if not BASE.exists(): raise SystemExit(f"No existe la carpeta {BASE}") rows: list[tuple[str, str]] = [] subdirs = sorted(p for p in BASE.iterdir() if p.is_dir()) # 1) Calcular SHA1 y guardar filas para el CSV for d in subdirs: video_path = d / "video.mp4" if not video_path.exists(): print(f"[WARN] No se encontró video.mp4 en {d}, se omite esta carpeta.") continue digest = sha1_of_file(video_path) print(f"{d.name} -> {digest}") rows.append((d.name, digest)) if not rows: print("[INFO] No se han encontrado carpetas con video.mp4, nada que hacer.") return # 2) Escribir CSV con mapping carpeta original -> sha1sum csv_path = BASE / "sha1sums.csv" with csv_path.open("w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["folder_name", "sha1sum"]) writer.writerows(rows) print(f"[INFO] CSV generado en {csv_path}") # 3) Renombrar carpetas a su sha1sum # Si dos carpetas tienen el mismo sha1, se deja la segunda sin renombrar. for old_name, digest in rows: old_path = BASE / old_name new_path = BASE / digest if not old_path.exists(): print(f"[INFO] Carpeta {old_path} ya no existe, se omite.") continue if new_path.exists(): print( f"[ERROR] Ya existe {new_path}, posible colisión de SHA1 o renombrado previo. " f"No se renombra {old_path}." ) continue print(f"Renombrando {old_path} -> {new_path}") old_path.rename(new_path) if __name__ == "__main__": main()