[python] remplacer (temporairement) des mots dans un fichier

remplacer (temporairement) des mots dans un fichier [python] - Python - Programmation

Marsh Posté le 10-08-2006 à 14:42:16    

Salut
 
histoire de mettre les choses au point : je suis plutot python-newbie, et le type qi a developé le soft est pas la en ce moment... et il a mal codé son truc (quoi, c'est pas bien de cracher sur ses collègues.... oui, je sais...) :)
 
Bref : l'objectif du bout de code, c de partir d'un message de mail initial, remplacer des mots-clés par d'autres (le num d'erreur pas exemple), et envoyer le mail. Ca donne ca :  
 

Code :
  1. ### remplace un texte dans un fichier  (provient de http://programmation-python.org/se [...] ercice-05)
  2. def remplace_texte(fichier, cherche, remplace):
  3. c_cherche = re.compile(cherche)
  4. curseur = open(fichier, 'r')
  5. try:
  6.  curseur_ecriture = open('%s.tmp' % fichier, 'w')
  7.  try:
  8.   for line in curseur.readlines():
  9.    line = re.sub(c_cherche, remplace, line)
  10.    curseur_ecriture.write(line)
  11.  finally:
  12.   curseur_ecriture.close()
  13. finally:
  14.  curseur.close()
  15. # renommage
  16. rename(fichier, '%s~' % fichier)
  17. rename('%s.tmp' % fichier, fichier)
  18. # mailer à l'admin l'erreur lors de la sauvegarde
  19. def mail_error(error_type):
  20. if (error_type != 0):
  21.  remplace_texte(mail_mssg, "AREA", area)
  22.  remplace_texte(mail_mssg, "ERROR_NUMBER", str(error_type))
  23.  mssg = open(mail_mssg, 'r').read()
  24.  session = smtplib.SMTP(smtpserver)
  25.  smtpresult = session.sendmail(SENDER, RECIPIENTS, mssg)
  26.  if smtpresult:
  27.   errstr = ""
  28.   for recip in smtpresult.keys():
  29.    errstr = """Could not delivery mail to: %s
  30. Server said: %s %s
  31. %s""" % (recip, smtpresult[recip][0], smtpresult[recip][1], errstr)
  32.   raise smtplib.SMTPException, errstr
  33. else:
  34.  mssg = open(mail_mssg, 'r').read()
  35.  session = smtplib.SMTP(smtpserver)
  36.  smtpresult = session.sendmail(SENDER, RECIPIENTS, mssg)
  37.  if smtpresult:
  38.   errstr = ""
  39.   for recip in smtpresult.keys():
  40.    errstr = """Could not delivery mail to: %s
  41. Server said: %s %s
  42. %s""" % (recip, smtpresult[recip][0], smtpresult[recip][1], errstr)
  43.   raise smtplib.SMTPException, errstr


 
Sauf que le problème, c'est que ca remplace definitivement les mots-cles, alors qu'il faudrait que ce ne les remplace que temporairement, le temps d'envoyer le mail.
 
Une 1Ere solution serait de faire une copie du fichier, remplacer, mailer, puis effacer, mais je sais pas trop comment faire ca (jvous ai deja dit que j'etais newbie ?), alors si vous pouviez m'aider,  
 
en vous remerciant....

Reply

Marsh Posté le 10-08-2006 à 14:42:16   

Reply

Marsh Posté le 10-08-2006 à 15:36:43    

vous tracassez pas, je crois que j'ai trouvé :  
 

Code :
  1. ### remplace un texte dans un fichier  (provient de http://programmation-python.org/se [...] xercice-05, puis adapté)
  2. def remplace_texte(fichier, cherche1, remplace1, cherche2, remplace2):
  3. c_cherche1 = re.compile(cherche1)
  4. c_cherche2 = re.compile(cherche2)
  5. curseur = open(fichier, 'r')
  6. try:
  7.  curseur_ecriture = open('%s.tmp' % fichier, 'w')
  8.  try:
  9.   for line in curseur.readlines():
  10.    line = re.sub(c_cherche1, remplace1, line)
  11.    line = re.sub(c_cherche2, remplace2, line)
  12.    curseur_ecriture.write(line)
  13.  finally:
  14.   curseur_ecriture.close()
  15. finally:
  16.  curseur.close()
  17. # renommage
  18. #  rename(fichier, '%s~' % fichier)
  19. #  rename('%s.tmp' % fichier, fichier)
  20. return '%s.tmp'  % fichier
  21. def mail_error(error_type):
  22.  new_msg = remplace_texte(mail_mssg, "ERROR_NUMBER", "12345","AREA", "testarea" )
  23.  mssg = open(new_msg, 'r').read()
  24.  session = smtplib.SMTP(smtpserver)
  25.  smtpresult = session.sendmail(SENDER, RECIPIENTS, mssg)
  26.  if smtpresult:
  27.   errstr = ""
  28.   for recip in smtpresult.keys():
  29.    errstr = """Could not delivery mail to: %s
  30. Server said: %s %s
  31. %s""" % (recip, smtpresult[recip][0], smtpresult[recip][1], errstr)
  32.   raise smtplib.SMTPException, errstr
  33.  os.remove(new_msg)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed