Holen Sie sich die letzten n Zeilen einer Datei, ähnlich wie tail

| | | | | | | | | | |

Ich schreibe einen Logdatei-Viewer für eine Webanwendung und dafür möchte ich durch die Zeilen der Logdatei blättern. Die Elemente in der Datei sind zeilenbasiert, wobei das neueste Element ganz unten steht.

Also brauche ich eine tail()-Methode, die n Zeilen von unten lesen kann und einen Offset unterstützt. Das habe ich mir ausgedacht:

def tail(f, n, offset=0): """Liest eine Zeile aus f mit einem Offset von Zeilenoffset.""" avg_line_length = 74 to_read = n + offset while 1: try: f.seek(-(avg_line_length * to_read), 2) außer IOError: # woops, anscheinend ist die Datei kleiner als wir wollen # um einen Schritt zurück zu gehen, stattdessen zum Anfang gehen 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 

Ist dies ein vernünftiger Ansatz?Wie wird empfohlen, Protokolldateien mit Offsets zu versehen?