Quantcast
Viewing latest article 43
Browse Latest Browse All 43

Get last n lines of a file, similar to tail

I'm writing a log file viewer for a web application and for that I want to paginate through the lines of the log file. The items in the file are line based with the newest item at the bottom.

So I need a tail() method that can read n lines from the bottom and support an offset. This is hat I came up with:

def tail(f, n, offset=0):"""Reads a n lines from f with an offset of offset lines."""    avg_line_length = 74    to_read = n + offset    while 1:        try:            f.seek(-(avg_line_length * to_read), 2)        except IOError:            # woops.  apparently file is smaller than what we want            # to step back, go to the beginning instead            f.seek(0)        pos = f.tell()        lines = f.read().splitlines()        if len(lines) >= to_read or pos == 0:            return lines[-to_read:offset and -offset or None]        avg_line_length *= 1.3

Is this a reasonable approach? What is the recommended way to tail log files with offsets?


Viewing latest article 43
Browse Latest Browse All 43

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>