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 -- http://mail.python.org/mailman/listinfo/python-list