On Mon, 07 May 2007 20:00:57 -0700, Alex Martelli wrote: > Steven D'Aprano <[EMAIL PROTECTED]> wrote: > >> On Mon, 07 May 2007 14:41:02 -0700, Nick Vatamaniuc wrote: >> >> > Rohit, >> > >> > Consider using an SQLite database. It comes with Python 2.5 and >> > higher. SQLite will do a nice job keeping track of the index. You can >> > easily find the line you need with a SQL query and your can write to >> > it as well. When you have a file and you write to one line of the >> > file, all of the rest of the lines will have to be shifted to >> > accommodate, the potentially larger new line. >> >> >> Using an database for tracking line number and byte position -- isn't >> that a bit overkill? >> >> I would have thought something as simple as a list of line lengths >> would do: >> >> offsets = [35, # first line is 35 bytes long >> 19, # second line is 19 bytes long... 45, 12, 108, 67] >> >> >> To get to the nth line, you have to seek to byte position: >> >> sum(offsets[:n]) > > ...and then you STILL can't write there (without reading and rewriting > all the succeeding part of the file) unless the line you're writing is > always the same length as the one you're overwriting, which doesn't seem > to be part of the constraints in the OP's original application. I'm > with Nick in recommending SQlite for the purpose -- it _IS_ quite > "lite", as its name suggests.
Hang on, as I understand it, Nick just suggesting using SQlite for holding indexes into the file! That's why I said it was overkill. So whether the indexes are in a list or a database, you've _still_ got to deal with writing to the file. If I've misunderstood Nick's suggestion, if he actually meant to read the entire text file into the database, well, that's just a heavier version of reading the file into a list of strings, isn't it? If the database gives you more and/or better functionality than file.readlines(), then I have no problem with using the right tool for the job. -- Steven. -- http://mail.python.org/mailman/listinfo/python-list