Python para fotógrafos I
Problema:
Recibimos una lista de numeros que corresponde a parte de los nombres de las fotografías enviadas al cliente, para que se las imprimamos, pero claro, son 20 de las 400 fotos que le enviamos.
Nuestras imágenes tienen un nombre tal que «DSCF9999.JPG» y pasamos al cliente las 400 fotografías para que seleccione 20, él nos pasa lo siguiente: «las 1204,1193,1137,961,983,833,1121,830,988,844,874,915,947,983,910,1514,1143,1500,1514,1509»
¿debemos seleccionarlas una a una?
Solucion:
No, usemos este código en python para hacerlo de manera automática y en pocos segundos.
import os
import shutil
#Este código recorre los numeros de las fotos que nos han mandado, comprueba que tenga 4 dígitos y en caso contrario añade tantos ceros como sean necesarios por delante, para adaptarse al formato 9999.
def modificar_numeros(lista_numeros,texto, extension):
numeros_modificados = []
for num in lista_numeros:
if len(num) <= 4:
# Rellenar con ceros a la izquierda para que tenga 4 dígitos
nuevo_numero = texto + num.zfill(4) + extension
else:
# Dejar el número sin cambios si tiene más de 4 cifras
nuevo_numero = num
numeros_modificados.append(nuevo_numero)
return numeros_modificados
# Copia los archivos a la carpeta desde la que imprimiremos. Si no existe la crea.
def copiar_archivos(origen, destino, nombres_archivos):
if not os.path.exists(destino):
os.makedirs(destino)
for nombre in nombres_archivos:
origen_completo = os.path.join(origen, nombre)
destino_completo = os.path.join(destino, nombre)
if os.path.exists(origen_completo):
shutil.copy(origen_completo, destino_completo)
print(f"Archivo {nombre} copiado a {destino}")
else:
print(f"Archivo {nombre} no encontrado en la carpeta de origen.")
# Parámetros
origen = 'jpg' # Cambia esta ruta por la carpeta de origen
destino = 'copias' # Cambia esta ruta por la carpeta de destino
# Lista de números en forma de strings separados por comas
numeros = "1204,1193,1137,961,983,833,1121,830,988,844,874,915,947,983,910,1514,1143,1500,1514,1509,838,839,907,919,1483,860,862,1116,1136,824,938,793,815,865,1139,1514,1509,1500,937,941,793,852,880,1074,1555,1550"
lista_numeros = numeros.split(',')
numero_de_elementos = len(lista_numeros)
print(f"Número de imágenes a imprimir: {numero_de_elementos}")
# Texto a añadir
texto = "DSCF" # los caracteres iniciales de los nombres de las imágenes
extension=".JPG"
# Aplicar la modificación
numeros_modificados = modificar_numeros(lista_numeros,texto, extension)
#realizar la copia
copiar_archivos(origen, destino, numeros_modificados)
# Unir la lista de números modificados de nuevo en una cadena separada por comas
resultado = ",".join(numeros_modificados)
# Ordenar la lista de nombres modificados alfabéticamente
nombres_modificados_ordenados = sorted(numeros_modificados)
# Imprimir la lista ordenada
print("Lista ordenada de nombres modificados:")
print(nombres_modificados_ordenados)
# Contar las apariciones de cada nombre en la lista, esto puede indicar que quieren mas de una copia.
conteo_nombres = {}
for nombre in numeros_modificados:
if nombre in conteo_nombres:
conteo_nombres[nombre] += 1
else:
conteo_nombres[nombre] = 1
# Filtrar y mostrar los nombres repetidos
nombres_repetidos = {nombre: conteo for nombre, conteo in conteo_nombres.items() if conteo > 1}
# Imprimir los resultados
print("\nImágenesr repetidas y su conteo:")
for nombre, conteo in nombres_repetidos.items():
print(f"{nombre}: {conteo} veces")
y esta es la salida del script.
Número de elementos en la lista: 46
Lista ordenada de nombres modificados:
['DSCF0793.JPG', 'DSCF0793.JPG', 'DSCF0815.JPG', 'DSCF0824.JPG', 'DSCF0830.JPG', 'DSCF0833.JPG', 'DSCF0838.JPG', 'DSCF0839.JPG', 'DSCF0844.JPG', 'DSCF0852.JPG', 'DSCF0860.JPG', 'DSCF0862.JPG', 'DSCF0865.JPG', 'DSCF0874.JPG', 'DSCF0880.JPG', 'DSCF0907.JPG', 'DSCF0910.JPG', 'DSCF0915.JPG', 'DSCF0919.JPG', 'DSCF0937.JPG', 'DSCF0938.JPG', 'DSCF0941.JPG', 'DSCF0947.JPG', 'DSCF0961.JPG', 'DSCF0983.JPG', 'DSCF0983.JPG', 'DSCF0988.JPG', 'DSCF1074.JPG', 'DSCF1116.JPG', 'DSCF1121.JPG', 'DSCF1136.JPG', 'DSCF1137.JPG', 'DSCF1139.JPG', 'DSCF1143.JPG', 'DSCF1193.JPG', 'DSCF1204.JPG', 'DSCF1483.JPG', 'DSCF1500.JPG', 'DSCF1500.JPG', 'DSCF1509.JPG', 'DSCF1509.JPG', 'DSCF1514.JPG', 'DSCF1514.JPG', 'DSCF1514.JPG', 'DSCF1550.JPG', 'DSCF1555.JPG']
Nombres repetidos y su conteo:
DSCF0983.JPG: 2 veces
DSCF1514.JPG: 3 veces
DSCF1500.JPG: 2 veces
DSCF1509.JPG: 2 veces
DSCF0793.JPG: 2 veces