私はそれをテストしていませんが(お願いします、それは嫌いではありません)、もっと速い方法があると思います。これはCソリューションのようなものですが、Pythonではかなり可能です。Pythonicでもありません。それは理論だと思います。
まず、ファイルのエンコーディングを知る必要があります。そのエンコーディングの文字が使用するバイト数(ASCIIでは1バイト)に変数を設定します。CHARsize(なぜそうではないのか)。おそらくASCIIファイルでは1バイトになるでしょう。
次に、ファイルのサイズを取得し、FILEsizeをそれに設定します。
FILEaddに(メモリ内の)ファイルのアドレスがあると仮定します。
FILEsizeをFILEaddに追加します。
バックワードを移動し(-1 *** CHARsize **ずつインクリメント)、各CHARsizeバイトで\ n(またはシステムが使用する改行)をテストします。最初の\nに到達すると、ファイルの最初の行の先頭の位置になります。\nを\x1a(26、EOFのASCII、またはシステムの1つ/エンコーディングを含むもの)に置き換えます。
必要に応じてクリーンアップします(ファイルサイズを変更し、ファイルをタッチします)。
これが私が思うように機能する場合は、ファイル全体を最初から読む必要がなく、最後から読むので、多くの時間を節約できます。