On Wed, 8 Mar 2006, andrew clarke wrote:
> On Tue, Mar 07, 2006 at 11:18:27AM -0000, Alan Gauld wrote: > > > > I was wondering if it is possible to write a string to a specific line > > > in a file without reading in the whole file in as the below. > > > > Some languages, such as COBOL and some BASICs etc support > > random access files, unfortunately Python doesn't (Although I'll be > > amazed if somebody hasn't cooked up (or is cooking up) a module > > that does it) > > You then go on to mention file.seek(). I thought that seek() provided > "random access", ie. to seek to anywhere at random in a file. Can you > clarify what you mean by "random access files"? Hi Andrew, I think Alan's referring to be able to go to any arbitrary line in a file or insert arbitrary lines in a file in those other languages. The Python core language gives us random access to a file's byte content by using seek(), but we can't do arbitrary insertion without pushing all the other bytes to the right. If it helps, imagine a list that doesn't allow for insert(), but does allow for appends(). L = ['a', 'c', 'd'] If we wanted to get a 'b' into there in the right place, we could go about it this way: L.append('b') ## ['a', 'c', 'd', 'b'] L[2], L[3] = L[3], L[2] ## ['a', 'c', 'b', 'd'] L[1], L[2] = L[2], L[1] ## ['a', 'b', 'c', 'd'] That is, we bubble the 'b' down. Or looking at it another way, we push and shove everything to the right of our insertion point to make room for the insertion. This impovershed interface is pretty much what we have with files. We're allowed to seek(), read(), and write(), but we're not given insert() as a primitive operation, because that's not an operation that's easy to do with files directly. It's doable, but it's painful and expensive. That's why programs that have to do things like insertion or deletion on a text file will load the file's contents into a list, work on the list, and then spit that list back into the file. It's just easier and faster to use a list as our intermediary. I hope this helps! _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor