Получить последние n строк файла, аналогично хвосту

| | | | | | | | | | |

Я пишу средство просмотра файла журнала для веб-приложения, и для этого я хочу разбивать строки файла журнала на страницы. Элементы в файле основаны на строках, причем самый новый элемент находится внизу.

Поэтому мне нужен метод tail(), который может читать n строк снизу и поддерживать смещение. Вот что я придумал:

def tail(f, n, offset=0): """Читает строки из f со смещением строк со смещением""" avg_line_length = 74 to_read = n + offset while 1: try: f.seek(-(avg_line_length * to_read), 2) кроме IOError: # упс. видимо файл меньше, чем мы хотим # сделать шаг назад, вместо этого перейти к началу f.seek(0) pos = f.tell() lines = f.read().splitlines() if len(lines) >= to_read или pos == 0: возвращаемые строки[-to_read:смещение и -смещение или None] avg_line_length *= 1,3 

Разумный ли это подход? Каков рекомендуемый способ добавления в хвост файлов журнала смещений?