String find and replace

John Roth newsgroups at jhrothjr.com
Tue Aug 26 21:26:10 EDT 2003


"hokiegal99" <hokiegal99 at vt.edu> wrote in message
news:3F4C04F8.5070401 at vt.edu...
> Thanks for the explanation, I can make it work this way:
>
> import os, string
> setpath = raw_input("Enter the path: ")
> for root, dirs, files in os.walk(setpath):
>     fname = files
>     x = 'THIS'
>     y = 'THAT'
>     for fname in files:
>        myfile = file(os.path.join(root,fname), 'r')
>        mystr = myfile.read()
>        myfile.close()
>        search = string.find(mystr, x)
>        if search >=1:
>           string.replace(mystr, x, y)
>           print "Replacing", x, "with", y, "in", fname
>
> If only I could actually make the change to the files! It works in
> theory, but not in practice ;) Anyone recommend how to actual write the
> change to the file? I'm new to this, so be kind.

Are you trying to rename the file? Look under os - Files and Directories
for the rename() function. It's 6.1.4 in the 2.2.3 docs.

John Roth
>
> Thanks Everyone!!!
>
>
>
> Geoff Gerrietts wrote:
> > Quoting hokieghal99 (hokiegal99 at hotmail.com):
> >
> >>import os, string
> >>print " "
> >>setpath = raw_input("Enter the path: ")
> >>def find_replace(setpath):
> >>   for root, dirs, files in os.walk(setpath):
> >>      fname = files
> >>      for fname in files:
> >>         find = string.find(file(os.path.join(root,fname), 'rb').read(),
'THIS')
> >
> >
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >                               this string is never bound to a name
> >                               (ie, you never assign
str=file(...).read())
> >
> >>         print find
> >>         if find >=1:
> >>             replace = string.replace(str, 'THIS', 'THAT')
> >
> >                                         ^^^
> >                                      this name is currently bound to
> >                                      the builtin function str()
> >
> >
> >>find_replace(setpath)
> >>print " "
> >
> >
> >
> > You might consider the fragment below, instead. It's a couple lines
> > longer, but safer (your .close() happens exactly when you want it to)
> > and probably more readable.
> >
> >    for root, dirs, files in os.walk(setpath):
> >       fname = files
> >       for fname in files:
> >          myfile = file(os.path.join(root,fname), 'rb')
> >          mystr = myfile.read()
> >          myfile.close()
> >          find = string.find(mystr, 'THIS')
> >          print find
> >          if find >=1:
> >              replace = string.replace(mystr, 'THIS', 'THAT')
> >
> >
> > Luck,
> > --G.
> >
>
>






More information about the Python-list mailing list