Overwrite just one line? Am I a n00b or is this impossible? Both? :D

Matt@revera electric.sunrise at gmail.com
Wed Apr 6 23:17:21 EDT 2005


Erik Max Francis wrote:
> Matt at revera wrote:
>
> > I'd like to overwrite just one line of a binary file, based on a
> > position set by seek().  Is there no way to do this? As far as I
can
> > tell I need to read the whole file, change the line, and write it
all
> > back out.  Not exactly easy on the memory, but I see no other
solution.
>
> You need to find what "just one line" means in a binary format.  If
the
> chunk you're replacing and the chunk you want to replace it with are
of
> different sizes, then you need to use a temporary file (or read the
> remainder of the file in memory).
>
> Otherwise, open the file in read-write binary mode ("r+b") and seek
and
> write appropriately.  In the general case, you need to write to a
> temporary file to get the job done.
>
> Memory usage is not a factor, here; read and write the temporary
files
> in chunks.  That way you can manage the memory usage to whatever
upper
> bound you wish.
>
> --
> Erik Max Francis && max at alcyone.com && http://www.alcyone.com/max/
> San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
>    Be able to be alone. Lose not the advantage of solitude.
>    -- Sir Thomas Browne

Ok makes sense, I was using a+b.  Would r+b be a better choice? I was
under the impression that it was only for reading.  I am writing
something of the same length in fact, but the python reference says
that on some versions of unix (I'm on mac OS X) append will ignore the
seek() position and dump it at the bottom of the file - which is
exactly what it's doing.  Am I stuck?

Thanks for all your help!




More information about the Python-list mailing list