Pobierz ostatnie n wierszy pliku, podobnie jak tail

| | | | | | | | | | |

Piszę przeglądarkę plików dziennika dla aplikacji internetowej i do tego chcę przeglądać wiersze pliku dziennika. Elementy w pliku są oparte na wierszach z najnowszym elementem na dole.

Więc potrzebuję metody tail(), która może odczytać n wierszy od dołu i obsługiwać przesunięcie. Oto kapelusz, który wymyśliłem:

def tail(f, n, offset=0): „„” Czyta wiersze z f z przesunięciem linii przesunięcia. „”” avg_line_length = 74 to_read = n + offset while 1: try: f.seek(-(avg_line_length * to_read), 2) z wyjątkiem IOError: # ups. najwyraźniej plik jest mniejszy niż to, czego chcemy # cofnąć się, zamiast tego przejść do początku f.seek(0) pos = f.tell() lines = f.read().splitlines() if len(lines) >= to_read lub pos == 0: return lines[-to_read:offset and -offset or None] avg_line_length *= 1.3 

Czy to rozsądne podejście? Jaki jest zalecany sposób śledzenia plików dziennika z przesunięciami?