Ottieni le ultime n righe di un file, simile a tail

| | | | | | | | | | |

Sto scrivendo un visualizzatore di file di registro per un'applicazione Web e per questo voglio impaginare le righe del file di registro. Gli elementi nel file sono basati sulla riga con l'elemento più recente in basso.

Quindi ho bisogno di un metodo tail() in grado di leggere n righe dal basso e supportare un offset. Questo è quello che mi è venuto in mente:

def tail(f, n, offset=0): """Legge una riga da f con un offset di linee di offset.""" avg_line_length = 74 to_read = n + offset while 1: try: f.seek(-(avg_line_length * to_read), 2) eccetto IOError: # woops. apparentemente il file è più piccolo di quello che vogliamo # fare un passo indietro, vai invece all'inizio 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 

È un approccio ragionevole? Qual è il modo consigliato per codare i file di registro con gli offset?