Kuyruğa benzer bir dosyanın son n satırını alın

| | | | | | | | | | |

Bir web uygulaması için bir günlük dosyası görüntüleyici yazıyorum ve bunun için günlük dosyasının satırlarını sayfalara ayırmak istiyorum. Dosyadaki öğeler, en alttaki en yeni öğeye göre sıralanmıştır.

Bu yüzden, alttan n satırlarını okuyabilen ve bir ofseti destekleyen bir tail() yöntemine ihtiyacım var. Bu benim bulduğum şapka:

def tail(f, n, offset=0): "f'den bir satırları ofset satırları ofsetiyle okur." while 1: try: f.seek(-(avg_line_length * to_read), 2) IOError hariç: # woops.görünüşe göre dosya istediğimizden daha küçük # geri adım atmak yerine başa git f.seek(0) pos = f.tell() satırları = f.read().splitlines() ise len(lines) >= to_read veya pos == 0: satırları döndürür[-to_read:offset ve -offset veya None] avg_line_length *= 1,3 

Bu makul bir yaklaşım mı? Günlük dosyalarını ofsetlerle sıralamak için önerilen yol nedir?