Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: reconFito en 1 Febrero 2020, 01:51 am



Título: [Python3] Ayuda con manipulacion de ficheros
Publicado por: reconFito en 1 Febrero 2020, 01:51 am
Hola a todos los que lean esto.
El siguiente script trata de automatizar el envió de correos, por medio del uso de dos ficheros.

1.carta.txt:
Estimado/a H #CLIENTE#
Tenemos noticias de que usted don/doña H #CLIENTE# no a abonado el importe
de la cuota mensual a que le obliga el draconiano contrato que firmó.

2.cliente.txt:
alguncorreo@gmail.com nombre apellido
alguncorreo@gmail.com nombre apellido

La idea es sustituir #CLIENTE# por el nombre y apellido del cliente, que es lo que ya he logrado hasta el momento y sustituir H(hombre) si esta presente o M(mujer) por su correspondiente identificativo Estimado/a y don/doña esta es la parte que aun no he podido hacer si me pudieran dar alguna idea de como optimizar y como finalizar este ejercicio se los agradeceria


Gracias por responder al final lo solucione usando expresiones regulares puede que no sea muy
eficiente pero lo logre hacer  ;D.
Este es el código

Código
  1. def envio_correo_personalizado():
  2.    try:
  3.  
  4.        # variables y apertura de ficheros
  5.        nombre = []
  6.        mensaje = ""
  7.        carta = open("carta.txt", "r")
  8.        carta_copia = open("carta.txt.copia", "w")
  9.        cliente = open("cliente.txt", "r")
  10.  
  11.        # lectura de clientes
  12.        for _cliente in cliente:
  13.            nombre += _cliente.rstrip().split("/")
  14.  
  15.        # Leyendo el fichero carta
  16.        linea = carta.readline()
  17.        while linea != "":
  18.            mensaje += linea
  19.            linea = carta.readline()
  20.  
  21.        # TODO Cambiando los valores del mensaje segun el genero usando expresiones regulares.
  22.        # FIXME Buscar otra forma de hacerlo.
  23.        mensaje = re.sub(
  24.            r"/a|/doña|H", "", mensaje) if "H" in mensaje else re.sub(r"o/|don/|M", "", mensaje)
  25.        mensaje = re.sub(r"#CLIENTE#", nombre[1], mensaje)
  26.        print("Mensaje cambiado")
  27.        print(mensaje)
  28.  
  29.        for i in mensaje:
  30.            carta_copia.write(i)
  31.  
  32.        # cierre de ficheros
  33.        carta.close()
  34.        cliente.close()
  35.        carta_copia.close()
  36.  
  37.    except IOError:
  38.        print("Fichero no existe")
  39.  
  40.  


Título: Re: [Python3] Ayuda con manipulacion de ficheros
Publicado por: EdePC en 17 Febrero 2020, 17:28 pm
Saludos,

- De momento me está funcionando lo siguiente:

carta.txt
Código:
#ESTIMAD@# #CLIENTE#
Tenemos noticias de que usted #DON@# #CLIENTE# no a abonado el importe
de la cuota mensual a que le obliga el draconiano contrato que firmó.

clientes.txt
Código:
carlos_aguero@gmail.com  ; Carlos Alberto ; Agüero López  ; H
camila_valerio@gmail.com ; Camila         ; Valerio Gómez ; M

Código
  1. clientes = open("clientes.txt", "r")
  2.  
  3. for cliente in clientes :
  4.  datos = cliente.split(";")
  5.  correo = datos[0].strip()
  6.  nombres = datos[1].strip()
  7.  apellidos = datos[2].strip()
  8.  sexo = datos[3].strip()
  9.  
  10.  carta = open("carta.txt", "r")
  11.  correo_cliente = open(correo + ".txt", "w")
  12.  for linea in carta :
  13.    tmp = linea
  14.    if "#ESTIMAD@#" in linea :
  15.      if sexo == "H" :
  16.        tmp = tmp.replace("#ESTIMAD@#", "Estimado")
  17.      elif sexo == "M" :
  18.        tmp = tmp.replace("#ESTIMAD@#", "Estimada")
  19.    if "#DON@#" in linea :
  20.      if sexo == "H" :
  21.        tmp = tmp.replace("#DON@#", "don")
  22.      elif sexo == "M" :
  23.        tmp = tmp.replace("#DON@#", "doña")
  24.    if "#CLIENTE#" in linea :
  25.      tmp = tmp.replace("#CLIENTE#", nombres + " " + apellidos)
  26.    correo_cliente.write(tmp)
  27.  carta.close()
  28.  correo_cliente.close()
  29. clientes.close()
  30.  

- He tenido algunos problemas con la ñ XD, pero viendo como lee dicha ñ el propio python y poniéndola así he visto que no tiene problemas, este mismo método lo usa en Batch, debe haber otros métodos que más tarde revisaré...

Resultados:

carlos_aguero@gmail.com.txt
Código:
Estimado Carlos Alberto Agüero López
Tenemos noticias de que usted don Carlos Alberto Agüero López no a abonado el importe
de la cuota mensual a que le obliga el draconiano contrato que firmó.

camila_valerio@gmail.com.txt
Código:
Estimada Camila Valerio Gómez
Tenemos noticias de que usted doña Camila Valerio Gómez no a abonado el importe
de la cuota mensual a que le obliga el draconiano contrato que firmó.