JPablos

Normalizar nombres de archivo en carpeta

Mar 7th, 2025 (edited)
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.78 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. """
  4. Creado el Vie 07 Mar 2025 20:14:58
  5.  
  6. @autor: JP
  7.  
  8. Funcionalidades del script:
  9.  
  10.    Eliminar espacios:
  11.  
  12.        Reemplaza espacios en blanco por guiones bajos ( _ ).
  13.  
  14.    Convertir a minúsculas:
  15.  
  16.        Cambia el nombre de los archivos a minúsculas.
  17.  
  18.    Agregar prefijo/sufijo:
  19.  
  20.        Permite al usuario agregar un texto al inicio o al final del nombre
  21.        del archivo.
  22.  
  23.    Reemplazar caracteres especiales:
  24.  
  25.        Cambia caracteres especiales (como á, é, ñ) por sus equivalentes
  26.        sin acentos.
  27.  
  28. Ejemplo de uso:
  29. Entrada:
  30.  
  31. Ingrese la ruta de la carpeta que desea renombrar:
  32.    C:/Users/TuUsuario/Documents/Pruebas
  33.  
  34. Seleccione una operación:
  35. 1. Eliminar espacios en blanco
  36. 2. Convertir a minúsculas
  37. 3. Agregar prefijo/sufijo
  38. 4. Reemplazar caracteres especiales
  39. Ingrese el número de la operación: 1
  40.  
  41. Salida:
  42.  
  43. Resumen de cambios:
  44. Renombrado: mi archivo.txt
  45.            -> mi_archivo.txt
  46. Renombrado: OTRO archivo.pdf
  47.            -> otro_archivo.pdf
  48. Renombrado: Basófilos.png
  49.            -> basofilos.png
  50. Renombrado: Días Trabajados.py
  51.            -> dias_trabajados.py
  52. Renombrado: Basófilos Media.csv
  53.            -> basofilos_media.csv
  54. Renombrado: Basófilos Totales.png
  55.            -> ej-basofilos_totales-cap_1.png
  56.            prefijo: "ej-"  |  sufijo: "-cap_1"
  57.  
  58. Total de archivos renombrados: 6
  59.  
  60. SUGERENCIA: Cree una carpeta "C:/Users/TuUsuario/Documents/Pruebas"
  61.            Haga las pruebas de normalización.
  62.            Cuando tenga claro que quiere obtener utilice el `script`
  63.            ¡¡Hace renombrado masivo. Use con precaución!!
  64. """
  65.  
  66. import os
  67. import unicodedata
  68.  
  69.  
  70. def eliminar_espacios(nombre):
  71.     """Reemplaza espacios en blanco por guiones bajos."""
  72.     return nombre.replace(" ", "_")
  73.  
  74.  
  75. def convertir_a_minusculas(nombre):
  76.     """Convierte el nombre del archivo a minúsculas."""
  77.     return nombre.lower()
  78.  
  79.  
  80. def agregar_prefijo_sufijo(nombre, prefijo="", sufijo=""):
  81.     """Agrega un prefijo y/o sufijo al nombre del archivo."""
  82.     nombre_base, extension = os.path.splitext(nombre)
  83.     return f"{prefijo}{nombre_base}{sufijo}{extension}"
  84.  
  85.  
  86. def reemplazar_caracteres_especiales(nombre):
  87.     """Reemplaza caracteres especiales por sus equivalentes sin acentos."""
  88.     nombre_normalizado = unicodedata.normalize("NFKD", nombre)
  89.     return "".join(
  90.         c for c in nombre_normalizado if not unicodedata.combining(c)
  91.     )
  92.  
  93.  
  94. def renombrar_archivos(carpeta, operacion, **kwargs):
  95.     """Renombra archivos en una carpeta según la operación seleccionada."""
  96.     # Obtener la lista de archivos en la carpeta
  97.     archivos = os.listdir(carpeta)
  98.     cambios = []
  99.  
  100.     # Recorrer cada archivo en la carpeta
  101.     for archivo in archivos:
  102.         ruta_completa = os.path.join(carpeta, archivo)
  103.  
  104.         # Verificar si es un archivo (no una carpeta)
  105.         if os.path.isfile(ruta_completa):
  106.             # Aplicar la operación seleccionada
  107.             if operacion == "eliminar_espacios":
  108.                 nuevo_nombre = eliminar_espacios(archivo)
  109.             elif operacion == "convertir_a_minusculas":
  110.                 nuevo_nombre = convertir_a_minusculas(archivo)
  111.             elif operacion == "agregar_prefijo_sufijo":
  112.                 nuevo_nombre = agregar_prefijo_sufijo(
  113.                     archivo,
  114.                     kwargs.get("prefijo", ""),
  115.                     kwargs.get("sufijo", ""),
  116.                 )
  117.             elif operacion == "reemplazar_caracteres_especiales":
  118.                 nuevo_nombre = reemplazar_caracteres_especiales(archivo)
  119.             else:
  120.                 print("Operación no válida.")
  121.                 return
  122.  
  123.             # Renombrar el archivo si el nombre cambió
  124.             if nuevo_nombre != archivo:
  125.                 nueva_ruta_completa = os.path.join(carpeta, nuevo_nombre)
  126.                 os.rename(ruta_completa, nueva_ruta_completa)
  127.                 cambios.append((archivo, nuevo_nombre))
  128.  
  129.     # Mostrar un resumen de los cambios realizados
  130.     if cambios:
  131.         print("/nResumen de cambios:")
  132.         for viejo_nombre, nuevo_nombre in cambios:
  133.             print(f"Renombrado: {viejo_nombre} -> {nuevo_nombre}")
  134.         print(f"/nTotal de archivos renombrados: {len(cambios)}")
  135.     else:
  136.         print("/nNo se realizaron cambios.")
  137.  
  138.  
  139. def main():
  140.     """Pide ruta y opción de normalización del nombre de archivo."""
  141.     # Preguntar al usuario la carpeta a analizar
  142.     carpeta = input(
  143.         "Ingrese la ruta de la carpeta que desea renombrar: "
  144.     ).strip()
  145.  
  146.     # Verificar si la carpeta existe
  147.     if not os.path.isdir(carpeta):
  148.         print("La carpeta no existe. Por favor, verifique la ruta.")
  149.         return
  150.  
  151.     # Preguntar al usuario qué operación desea realizar
  152.     print("/nSeleccione una operación:")
  153.     print("1. Eliminar espacios en blanco")
  154.     print("2. Convertir a minúsculas")
  155.     print("3. Agregar prefijo/sufijo")
  156.     print("4. Reemplazar caracteres especiales")
  157.     opcion = input("Ingrese el número de la operación: ").strip()
  158.  
  159.     # Ejecutar la operación seleccionada
  160.     if opcion == "1":
  161.         renombrar_archivos(carpeta, "eliminar_espacios")
  162.     elif opcion == "2":
  163.         renombrar_archivos(carpeta, "convertir_a_minusculas")
  164.     elif opcion == "3":
  165.         prefijo = input(
  166.             "Ingrese el prefijo (o deje vacío si no desea agregar uno): "
  167.         ).strip()
  168.         sufijo = input(
  169.             "Ingrese el sufijo (o deje vacío si no desea agregar uno): "
  170.         ).strip()
  171.         renombrar_archivos(
  172.             carpeta, "agregar_prefijo_sufijo", prefijo=prefijo, sufijo=sufijo
  173.         )
  174.     elif opcion == "4":
  175.         renombrar_archivos(carpeta, "reemplazar_caracteres_especiales")
  176.     else:
  177.         print("Opción no válida.")
  178.  
  179.  
  180. if __name__ == "__main__":
  181.     main()
  182.  
Advertisement
Add Comment
Please, Sign In to add comment