• Debutant : remplacer une chaine de caracteres
Réponses:
10
Visites:
0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum.
Inscrivez-vous maintenant
• Debutant : remplacer une chaine de caracteres
Posté par
ph_biohazard
le
01/11/2006 15:11
Bonjour a tous;
Je suis dans Python depuis 2 jours Vous allez peut etre trouver cette question stupide, mais je ne m'en sorts pas. Je voudrais rechercher la chaine 'smtpd' dans main.cf et le remplacer par une 'addr ip' J'ai essaye ceci, sans succes, mais peut etre je parts sur une mauvaise piste. ipIn = raw_input('Entrer ip forwarding ? ') s = open('/etc/postfix/master.cf').read() if 'smtpd' in s: s.replace('smtpd' , ipIn) f.write('/etc/postfix/master.cf') else : exit() Je ne comprends pas s.replace met un expected charactere buffer object et que mon fichier ne se trouve pas modifier Merci pour votre aide Marc |
• Re: Debutant : remplacer une chaine de caracteres
Posté par
fraoustin
le
02/11/2006 09:52
je ferais:
code: ipIn = raw_input('Entrer ip forwarding ? ')
par contre je n'ai pas testé |
• Re: Debutant : remplacer une chaine de caracteres
Posté par
palm6174
le
02/11/2006 11:12
J'ai testé, ça marche
|
• Re: Debutant : remplacer une chaine de caracteres
Posté par
ph_biohazard
le
02/11/2006 16:14
Bonjour
Super merci Par rapport a cela, je dois egalement dans le fichier remplacer la chaine smtp ET smtpd Si je modifie smtpd de ton script en smtp, cad : # ipIn = raw_input('Entrer ip du serveur de mail distant ? ') portIn = raw_input('Entrer le port du serveur de mail distant ? ') s = open('c:/master.cf','r') o = open('c:/master.cf.out','w') for i in s.readlines(): # o.write('%s\n' % i.replace('smtpd' , ipIn)) o.write('%s\n' % i.replace('smtp' , portIn)) s.close() o.close() J'ai ce resultat : # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== 25 inet n - y - - 25d Deux commentaires par rapport a ce resultat : a. Le script m'a remplace TOUS les mots contenant smtp mais il ne tient pas rigueur de voir la fin de la ligne ou il y a 25d car il a remplace smtpd en 25d b. Comment renommer le .out en master.cf . Si je mets dans le script : s = open('c:/master.cf','rw') ou s = open('c:/master.cf','w') en remplacant les appels au fichier destination par l'original, j'ai cette erreur : for i in s.readlines(): IOError:Bad file descriptor Merci encore pour ton aide Marc |
• Re: Debutant : remplacer une chaine de caracteres
Posté par
gawel
le
03/11/2006 02:20
si tu commence par remplacer les smtpd puis les smtp, cela devrait aller, non ?
Pour ton problème de renomage, tu peux passer par une StringIO code: from cStringIO import StringIO
|
• Re: Debutant : remplacer une chaine de caracteres
Posté par
gawel
le
03/11/2006 02:22
oups, 'in' est un mot réservé. choisis en un autre
|
• Re: Debutant : remplacer une chaine de caracteres
Posté par
ph_biohazard
le
03/11/2006 11:53
WOW
Merci Gawel, c'est une bombe ton truc Super merci Marc |
• Re: Debutant : remplacer une chaine de caracteres
Posté par
ph_biohazard
le
03/11/2006 13:27
Re,
Comment ferais tu pour ajouter un # devant une ligne ? exemple: Voici la commande originale mynetworks = 127.0.0.1 Voici ce que j'aimerai avoir : #mynetworks = 127.0.0.1 mynetworks = 192.168.1.1 La ligne mynetworks = 192.168.1.1 est une valeur que je reecris avec ton astuce replace, mais je voudrais qd meme faire un backup des modifs Si tu peux me mettre sur la piste, ce serait sympa Merci Marc |
• Re: Debutant : remplacer une chaine de caracteres
Posté par
palm6174
le
03/11/2006 15:22
une solution parmi plein d'autres
a = "mynetworks = 192.168.1.1" b = "#" + a |
• Re: Debutant : remplacer une chaine de caracteres
Posté par
palm6174
le
03/11/2006 15:23
oui enfin , c'est 127... que tu voulais commenter, mais tu vois l'idée
|
• Re: Debutant : remplacer une chaine de caracteres
Posté par
gawel
le
04/11/2006 13:08
Tiens, je suis gentil, j'ai pensé à toi.
http://www.afpy.org/Members/gawel/python/utilisation_de_re_sub/ Dans le dernier exemple, tu peux renvoyer deux lignes au lieux d'une pour guarder l'originale commentée. Après, les regexp, c'est pas forcément simple. J'espère que ca va pas t'embrouiller |






