Protección de pagoDetalles
- Los cambios dentro del paquete son gratuitos.
- Si no responde en los 3 días siguientes a la entrega, el trabajo se acepta automáticamente.
El dinero queda reservado al pagar y solo se libera cuando usted acepta el trabajo.

Ejemplo de resultado
Unir los archivos de ventas mensuales de 9 tiendas en un único informe de Excel
Cómo se ejecuta
python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO Carpeta: sales/2026-10, 9 archivos encontrados
2026-11-02 09:14:03 INFO shop-01.csv: 1.284 filas
2026-11-02 09:14:04 INFO shop-02.xlsx: 967 filas
2026-11-02 09:14:04 WARN shop-07.csv: 3 filas sin precio omitidas (líneas 88, 412, 913)
2026-11-02 09:14:05 INFO Listo: 10.412 filas -> report-2026-10.xlsx (hojas “Ventas” y “Totales”)
Configuración, no código
Los nombres de columna de cada tienda están en settings.ini, así que una tienda nueva o una columna renombrada es una línea ahí:
[columns]
date = Fecha, Fecha de venta, Día
product = Producto, Artículo, Nombre
quantity = Cant., Cantidad, Uds.
price = Precio, Precio unitario
Una parte del código
def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
"""Lee el archivo de una tienda y le da los nombres de columna del informe."""
table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
renamed = {}
for name, variants in columns.items():
found = next((c for c in table.columns if c.strip() in variants), None)
if found is None:
raise ReportError(f"{path.name}: no hay columna para '{name}' (se buscó {', '.join(variants)})")
renamed[found] = name
table = table.rename(columns=renamed)[list(columns)]
table["shop"] = path.stem
return table
Archivos: un archivo ZIP con merge_sales.py (310 líneas), settings.ini, requirements.txt y un README sobre cómo instalar Python, ejecutar el script y qué significa cada mensaje del registro. El cliente lo ejecuta en su propio ordenador.
Cliente: una pequeña cadena de 9 papelerías; cada tienda envía sus ventas del mes en un archivo CSV o Excel, con nombres de columna ligeramente distintos. Tarea: un único script que lea todos los archivos de una carpeta, dé a las columnas un mismo formato y genere un solo informe de Excel con todas las ventas y una hoja de totales por tienda.
El cliente y todos los datos son ficticios.
Acerca de este servicio
Los contactos exportados de una tienda, un CRM o las inscripciones a un evento rara vez coinciden con lo que un servicio de email marketing quiere importar: otros nombres de columna, nombre y apellidos en una celda, etiquetas en sitios raros, personas que se dieron de baja aún en la lista. Este script de Python lee sus exportaciones y escribe un CSV limpio con la estructura de importación de su servicio: nombres separados si hace falta, campos y etiquetas asignados, correos mal formados y duplicados excluidos y, desde Estándar, solo las personas con marca de consentimiento, sin las dadas de baja, con un archivo de filas descartadas para que usted lo revise. Es para sus propios contactos que aceptaron recibir noticias suyas, nunca para listas compradas o extraídas de webs. Funciona en su ordenador y no se conecta al servicio; usted importa el archivo.
Qué incluye
- Qué recibeUn archivo ZIP con el script de Python, un README con instrucciones paso a paso y, desde Estándar, un archivo de configuración con la correspondencia de campos y etiquetas; el código también se muestra en la página del pedido.
- La estructura de su servicioSegún su plantilla de importación o un archivo de muestra
- Consentimiento respetadoDesde Estándar, solo quien aceptó, sin bajas
- Fuera duplicados y erratasDirecciones mal formadas y repeticiones excluidas
- Filas descartadas guardadasUn archivo aparte que muestra qué se excluyó y por qué
- Código legibleCon comentarios, fácil añadir un campo más adelante
Cómo funciona
- 1MuestrasUsted envía filas inventadas de cada exportación y el formato de importación de su servicio
- 2CódigoEscribimos el script y la guía para ejecutarlo
- 3PruébeloLo ejecuta, revisa las filas descartadas e importa una pequeña lista de prueba
- 4CambiosPide cambios dentro de su paquete y nos envía cualquier mensaje de error
Qué necesitamos de usted
El encabezado y 10-20 filas de cada exportación con nombres y correos inventados pero la misma estructura, qué columna indica el consentimiento y cuál la baja, el servicio de email marketing que usa y su plantilla de importación o un enlace a su página de ayuda de importación, y cómo deben configurarse las etiquetas o segmentos. Cómo se recogieron los contactos (su tienda, formulario de alta, eventos). No envíe nunca la lista real.
Le preguntaremos:
- ¿De dónde salen los contactos?
- ¿En qué servicio de email marketing los importará?
- ¿Cómo se registra el consentimiento?
- ¿Necesita etiquetas o segmentos?
Comparar paquetes
| Paquetes | BásicoUna exportación, un formato16 US$ | EstándarExportación con configuración33 US$ | PremiumHerramienta de contactos67 US$ |
|---|---|---|---|
| Plazo | 1 día | 2 días | 3 días |
| Cambios | 1 | 2 | 3 |
| Código | hasta 150 líneas | hasta 400 líneas | hasta 1.000 líneas |
| Archivos de código | 1 | hasta 3 | hasta 8 |
| Archivo de configuración | No | Sí | Sí |
| Mensajes de error claros y registro | No | Sí | Sí |
| Opciones de ejecución y guía para ejecutarlo de forma programada | No | No | Sí |
| Guía de instalación y uso (README) | Sí | Sí | Sí |
| Lenguaje | Python | Python | Python |
| Hacer pedido Básico | Hacer pedido Estándar | Hacer pedido Premium |
Protección de pago
Usted paga al hacer el pedido, pero el dinero solo se libera por un trabajo aceptado.
- Precio fijoEl precio del paquete no cambia después del pago.
- El dinero queda reservadoAl pagar, el importe solo queda reservado. Pasa a Dleex cuando usted acepta el trabajo.
- Revisado antes de la entregaCada resultado pasa un control de calidad antes de llegar a usted, y lo ve en la página del pedido antes de aceptarlo.
- Cambios gratuitosSolicite cambios dentro de su brief tantas veces como permita el paquete.
- Aceptación a los 3 díasSi en los 3 días siguientes a la entrega no acepta el trabajo ni solicita cambios, se acepta automáticamente. Si escribe en el chat del pedido después de la entrega, el pedido queda en espera; cuando le respondamos, podremos reiniciar el plazo de 3 días y se lo indicaremos en el chat.
- Rehacer el trabajo o reembolso totalSi el resultado no se ajusta a su brief y los cambios no lo resolvieron, o el trabajo tarda más del doble de su plazo, escriba en el chat del pedido: rehacemos el trabajo o le reembolsamos el pago íntegro.
Preguntas y respuestas
¿Puedo usarlo con una lista comprada?
No. Es para sus propios contactos que aceptaron recibir sus correos. Las listas compradas o extraídas de webs incumplen las normas de los servicios de email marketing y la ley en muchos países.
¿Sube los contactos al servicio?
No. Crea el archivo; usted lo importa en su cuenta del servicio de email marketing, donde además le piden confirmar que los contactos dieron su consentimiento.
¿Comprobará que los correos existen?
Comprueba que cada dirección está bien escrita y marca erratas habituales en el dominio. Si un buzón existe solo lo sabe el servicio de correo, y su servicio de email marketing informa de los rebotes tras el envío.
¿Está segura mi lista de contactos?
Se queda en su ordenador: usted ejecuta el script, y nosotros solo vemos las filas inventadas que nos envía.
¿No encontró su respuesta?