simultaneous reading and writing a textfile
Larry Bates
larry.bates at websafe.com
Tue May 16 12:19:16 EDT 2006
Marco Herrn wrote:
> Hi,
>
> I have a text file with some lines in it.
> Now I want to iterate over this file and exchange some lines with some
> others. I tried this approach:
>
> try:
> myfile= file('myfile', 'r+')
>
> while 1:
> line= myfile.readline()
> if not line: break
>
> l= line.strip().split()
> if len(l) == 1:
> hostname= l[0]
> myfile.write(hostname+' '+mac+'\n')
> break
>
> finally:
> if not myfile is None:
> myfile.close()
>
>
> This should inspect the file and find the first line, that can't be
> split into two parts (that means, which has only one word in it).
> This line should be exchanged with a line that contains some more
> info.
>
> Unfortunately (or how better python programmers than I am would say,
> "of course") this doesn't work. The line is exchanged, but also some
> more lines.
>
> Now how can I achieve, what I want? Really exchange one line with
> another, regardless of their length. Is this possible? If this is not
> possible, then what would be the best approach to do this?
>
> I do not want to read the whole file, exchange the line in memory and
> then write the whole file. This would be quite slow with large files.
>
> Regard1s
> Marco
The only way that in-place writes will work is if you adopt a fixed
line length for the file and use read(bytes) instead of readline()
method. You could create file with fixed length lines and write them
in-place without disturbing lines that follow. Take a look at seek(),
write() methods.
The alternative is to create a different file (read/write
the entire file)each time you want to make a change. Unless the file
is REALLY long, this will be extremely fast.
If you have a LOT of data you want to work with this way and it is
changing a lot, you need to use a database not a text file for data
storage.
-Larry
More information about the Python-list
mailing list