Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1402 connectés 

  FORUM HardWare.fr
  Programmation
  Python

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1423691
Burps
Posté le 10-08-2006 à 14:42:16  profilanswer
 

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....

mood
Publicité
Posté le 10-08-2006 à 14:42:16  profilanswer
 

n°1423759
Burps
Posté le 10-08-2006 à 15:36:43  profilanswer
 

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)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

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

 

Sujets relatifs
[Macro Word] Ouvrir Un fichier csv sous Excel par une macro Word[PHP] insertion données depuis un fichier .SQL
Décompresser un fichier zip sur le serveurFichier HTC
VBA: Masquer des lignes d'un grand fichier Excel rapidement[RESOLU AVEC HONTE] Pb avec un upload de fichier un peu étrange :)
[Résolu] Lire les 10 dernières lignes d'un fichierDire si des mots se trouvent dans une chaîne
[ Résolu ] Lancer un fichier BAT depuis CsharpLecture fichier texte UTF-8
Plus de sujets relatifs à : [python] remplacer (temporairement) des mots dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR