fileinput

naaman arphaksad at gmail.com
Fri Aug 14 20:05:40 EDT 2009


On Aug 13, 11:41 pm, naaman <arphak... at gmail.com> wrote:
> On Aug 13, 7:50 am, Dave Angel <da... at ieee.org> wrote:
>
>
>
> > naaman wrote:
> > > On Aug 12, 1:35 pm, Dave Angel <da... at ieee.org> wrote:
>
> > >> naaman wrote:
>
> > >>> I'm writing my first Python script and
> > >>> I want to use fileinput to open a file in r+ mode.
> > >>> Tried fileinput.input(sys.argv[1:],"r+") but that didn't work.
> > >>> ANy ideas?
>
> > >>> Need to find and overwrite a line in a file several times.
> > >>> I can do it using open and seek() etc. but was wondering if I can use
> > >>> fileinput.
>
> > >>> thanks;
>
> > >> I haven't used it, but check out the 'inplace' keyword parameter.
>
> > >> DaveA
>
> > > I've only Python for a week so I'm not sure what inplace does
>
> > You should read the docs for it
> >     (http://www.python.org/doc/2.6.2/library/fileinput.html ),
> > but it's not very clear to me either  So I dug up an example on the web:
> >      (ref:  http://effbot.org/librarybook/fileinput.htm)
>
> > import fileinput, sys
>
> > for line in fileinput.input(inplace=1):
> >     # /convert Windows/DOS text files to Unix files/
> >     if line[-2:] == "\r\n":
> >         line = line[:-2] + "\n"
> >     sys.stdout.write(line)
>
> > The inplace argument tells it to create a new file with the same name as
> > the original (doing all the necessary nonsense with using a scratch
> > file, and renaming/deleting) for each file processed.  Stdout is pointed
> > to that new version of the file.  Notice that you have to explicitly
> > write everything you want to wind up in the file -- if a given line is
> > to remain unchanged, you just write "line" directly.
>
> > If you're new to Python, I do not recommend trying to do open/seek to
> > update a text file in place, especially if you're in DOS.  There are
> > lots of traps.  the inplace method of fileinput avoids these by
> > implicitly creating temp files and handling the details for you, which
> > probably works great if you're dealing with text, in order.
>
> > DaveA
>
> here's the solution
>
> import fileinput, sys
>
> for line in fileinput.input(sys.argv[1],inplace=1):
>     if (line[:-1]==r'drew'):
>         line=line.replace(line,"fancy dog")
>     sys.stdout.write(line)
>
> I want to replace drew in my input file with fancy dog.
> Tested with this input file
> angel
> heaven
> flying monkees
> lazy dogs
> drew
> blue sky
> veritas
>
> and got this
> angel
> heaven
> flying monkees
> lazy dogs
> fancy dog
> blue sky
> veritas
>
> So drew was replaced with fancy dog.
> Thanks to your inputs I got this solved. :-))

oops there should be a +"\n" after "fancy dog"
 line=line.replace(line,"fancy dog"+"\n")



More information about the Python-list mailing list