テールと同様に、ファイルの最後のn行を取得します

| | | | | | | | | | |

Webアプリケーション用のログファイルビューアを作成しているので、ログファイルの行をページ分割したいと思います。ファイル内のアイテムは、下部にある最新のアイテムに基づいた行です。

したがって、 n 行を下から読み取り、オフセットをサポートできる tail()メソッドが必要です。これが私が思いついた帽子です。

  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:#woops。どうやらファイルは私たちが望むものよりも小さいので、#代わりに最初に移動しますf.seek(0)pos = f.tell()lines = f.read()。splitlines()if len(lines)>=to_readまたはpos==0:return lines [-to_read:offset and -offset or None] avg_line_length * = 1.3 

これは合理的なアプローチですか?オフセットを使用してログファイルをテール化するための推奨される方法は何ですか?