Python 3.2 bug? Reading the last line of a file

tkpmep at hotmail.com tkpmep at hotmail.com
Wed May 25 15:33:39 EDT 2011


The following function that returns the last line of a file works
perfectly well under Python 2.71. but fails reliably under Python 3.2.
Is this a bug, or am I doing something wrong? Any help would be
greatly appreciated.


import os

def lastLine(filename):
    '''
        Returns the last line of a file
        file.seek takes an optional 'whence' argument which allows you
to
        start looking at the end, so you can just work back from there
till
        you hit the first newline that has anything after it
        Works perfectly under Python 2.7, but not under 3.2!
   '''
    offset = -50
    with open(filename) as f:
        while offset > -1024:
            offset *= 2
            f.seek(offset, os.SEEK_END)
            lines = f.readlines()
            if len(lines) > 1:
                return lines[-1]

If I execute this with a valid filename fn. I get the following error
message:

>>> lastLine(fn)
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    lastLine(fn)
  File "<pyshell#11>", line 13, in lastLine
    f.seek(offset, os.SEEK_END)
io.UnsupportedOperation: can't do nonzero end-relative seeks

Sincerely

Thomas Philips



More information about the Python-list mailing list