Preservando todos los subdirectorios al guardar un archivo – Python
Tengo una carpeta con varios subdirectorios y dentro de ellos hay archivos con diferentes extensiones como .jpg, .png, etc. Me gustaría extraer solo los archivos .jpg y realizar algunas tareas en ellos, como el recorte, etc. Luego, quiero guardar estos archivos “nuevos” (es decir, los recortados) en los subdirectorios de los que provienen. Sin embargo, no quiero que estos nuevos archivos se guarden en la misma carpeta de la que provienen. En cambio, quiero que se guarden en una carpeta diferente que contenga todos los mismos subdirectorios con los mismos nombres de los que provienen. Esta nueva carpeta solo debe contener los archivos recortados “nuevos”. He incluido una ilustración a continuación para explicar mejor mi pregunta.
He intentado lo siguiente:
for imgs in glob.iglob(self.Main_Folder + '//'**/*.jpg', recursive=True):
Output_Folder = os.path.join(os.path.dirname(imgs), "cropped" + str(idx) + ".jpg")
Sin embargo, esto sobrescribe los archivos .jpg ubicados en sus subdirectorios en la carpeta principal (es decir, sobrescribe 1.jpg, 2.jpg, etc). ¡Cualquier ayuda en esto sería muy apreciada!
davy.ai
Para lograr esto, puedes modificar tu código para primero crear los nuevos subdirectorios en la nueva carpeta y luego guardar las imágenes recortadas en esos subdirectorios. Aquí tienes un ejemplo de código:
En este código, primero iteramos sobre todos los archivos
.jpg
en laMain_Folder
. Para cada archivo, obtenemos la ruta del subdirectorio relativa a laMain_Folder
usandoos.path.relpath
. Luego creamos una nueva ruta de subdirectorio en laNew_Folder
usandoos.path.join
yos.makedirs
, asegurándonos de usarexist_ok=True
para evitar errores si el subdirectorio ya existe. Luego abrimos la imagen original usando la biblioteca Pillow, realizamos cualquier procesamiento de imagen como recorte y guardamos la imagen recortada en el subdirectorio recién creado usandoos.path.join
ycropped_im.save
. Esto asegura que los nuevos archivos se guarden en subdirectorios separados en laNew_Folder
y no en los mismos subdirectorios en laMain_Folder
.