Or, open the file as a blob (one long string) and do a single 'replace'.

fin = open("dirtyfile.txt", 'r').read().replace('## ', '#')
open("dirtyfile.txt", 'w').write(fin)

or,

open("dirtyfile.txt", 'w').write(open("dirtyfile.txt", 'r').read().replace('## ', '#'))




----- Original Message ----- From: "Tommy Kaas" <tommy.k...@kaasogmulvad.dk>
To: <tutor@python.org>
Sent: Monday, June 06, 2011 2:58 AM
Subject: Re: [Tutor] search-replace



-----Oprindelig meddelelse-----
Fra: tutor-bounces+tommy.kaas=kaasogmulvad...@python.org
[mailto:tutor-bounces+tommy.kaas=kaasogmulvad...@python.org] På vegne
af Alan Gauld
Sendt: 6. juni 2011 11:51
Til: tutor@python.org
Emne: Re: [Tutor] search-replace


"Tommy Kaas" <tommy.k...@kaasogmulvad.dk> wrote


> I'm especially interested to know how I do more than just one
> search-replace without having to repeat the whole step below.
> fin = open("dirtyfile.txt")
> fout = open("cleanfile.txt", "w")
> for line in fin:
>    fout.write(line.replace('## ', '#'))
> fin.close()
> fout.close()

Can be simplified to:

with open("cleanfile.txt", "w") as fout:
     for line in open("dirtyfile.txt"):
           fout.write(line.replace('## ', '#'))

To do multiple replaces simply expand the inner block


     for line in open("dirtyfile.txt"):
           line = line.replace(....)   #first
           line = line.replace(....)   #second etc
           fout.write(line)

Or if you have a lot of them:

replacePatterns = [('##','#'),('!!!','!!'),....]

     for line in open("dirtyfile.txt"):
            for old,new in repace_patterns:
                 line = line.replace(old,new)
            fout.write(line)



Excellent! Thanks.
tommy

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to