500MBを超える大きなログファイルを生成するアプリケーションがあります。
私はPythonでいくつかのユーティリティを作成しました。これにより、ログファイルをすばやく参照して、目的のデータを見つけることができます。しかし、ファイルが大きすぎてすべてをメモリにロードできないデータセットを取得するようになりました。
したがって、ドキュメントを1回スキャンし、インデックスを作成してから、一度に確認するドキュメントのセクションのみをメモリにロードします。
これは、「ファイル」を開いて一度に1行ずつ読み取り、from file.tell()でオフセットを保存するときに機能します。その後、file.seek(offset、0)を使用して、ファイルのそのセクションに戻ることができます。
ただし、私の問題は、ログファイルにUTF-8が含まれている可能性があるため、コーデックモジュール(codecs.open(<filename>, 'r', 'utf-8')
)で開く必要があることです。結果のオブジェクトを使用して、seekとtellを呼び出すことができますが、それらは一致しません。
コーデックは何らかのバッファリングを行う必要があると思いますか、それとも、tellからのバイトではなく文字数を返すのでしょうか?
これを回避する方法はありますか?