Obtenir les n dernières lignes d’un fichier, similaire à la queue

| | | | | | | | | | |

J'écris une visionneuse de fichier journal pour une application Web et pour cela, je souhaite parcourir les lignes du fichier journal. Les éléments du fichier sont basés sur des lignes avec l'élément le plus récent en bas.

J'ai donc besoin d'une méthode tail() qui peut lire n lignes à partir du bas et prendre en charge un décalage. C'est ce que j'ai trouvé :

def tail(f, n, offset=0) : """Lit une ligne à partir de f avec un décalage de lignes décalées.""" avg_line_length = 74 to_read = n + offset while 1 : essayez : f.seek(-(avg_line_length * to_read), 2) sauf IOError : # woops. apparemment, le fichier est plus petit que ce que nous voulons # pour revenir en arrière, allez au début à la place 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 

Est-ce une approche raisonnable ? Quelle est la méthode recommandée pour suivre les fichiers journaux avec des décalages ?