Haal de laatste n regels van een bestand op, vergelijkbaar met staart

| | | | | | | | | | |

Ik ben een logbestandviewer aan het schrijven voor een webtoepassing en daarvoor wil ik door de regels van het logbestand pagineren. De items in het bestand zijn regelgebaseerd met het nieuwste item onderaan.

Dus ik heb een tail()-methode nodig die n-regels vanaf de onderkant kan lezen en een offset kan ondersteunen. Dit is wat ik bedacht:

def tail(f, n, offset=0): """Lees een regel van f met een offset van offset lijnen.""" avg_line_length = 74 to_read = n + offset while 1: try: f.seek(-(avg_line_length * to_read), 2) behalve IOError: # woops. blijkbaar is het bestand kleiner dan wat we willen # om een stap terug te doen, ga in plaats daarvan naar het begin f.seek(0) pos = f.tell() lines = f.read().splitlines() if len(lines) >= to_read or pos == 0: return lines[-to_read:offset en -offset of None] avg_line_length *= 1.3 

Is dit een redelijke benadering? Wat is de aanbevolen manier om logbestanden met offsets te omzeilen?