Mike wrote: > On Jul 26, 8:46 am, "Daniel Nogradi" <[EMAIL PROTECTED]> wrote: >>>> A very simple question: I currently use a cumbersome-looking way of >>>> getting the first, second, etc. line of a text file: >>>> for i, line in enumerate( open( textfile ) ): >>>> if i == 0: >>>> print 'First line is: ' + line >>>> elif i == 1: >>>> print 'Second line is: ' + line >>>> ....... >>>> ....... >>>> I thought about f = open( textfile ) and then f[0], f[1], etc but that >>>> throws a TypeError: 'file' object is unsubscriptable. >>>> Is there a simpler way? >>> If all you need is sequential access, you can use the next() method of >>> the file object: >>> nextline = open(textfile).next >>> print 'First line is: %r' % nextline() >>> print 'Second line is: %r' % nextline() >>> ... >>> For random access, the easiest way is to slurp all the file in a list >>> using file.readlines(). >> Thanks! This looks the best, I only need the first couple of lines >> sequentially so don't need to read in the whole file ever. > > if you only ever need the first few lines of a file, why not keep it > simple and do something like this? > > mylines = open("c:\\myfile.txt","r").readlines()[:5] > > that will give you the first five lines of the file. Replace 5 with > whatever number you need. next will work, too, obviously, but won't > that use of next hold the file open until you are done with it? Or, > more specifically, since you do not have a file object at all, won't > you have to wait until the function goes out of scope to release the > file? Would that be a problem? Or am I just being paranoid? > Unfortunately the expression
f.readlines()[:5] reads the whole file in and generates a list of the lines just so it can slice the first five off. Compare that, on a large file, with something like [f.next() for _ in range(5)] and I think you will see that the latter is significantly better in almost all respects. regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://del.icio.us/steve.holden --------------- Asciimercial ------------------ Get on the web: Blog, lens and tag the Internet Many services currently offer free registration ----------- Thank You for Reading ------------- -- http://mail.python.org/mailman/listinfo/python-list