1. ホーム
  2. python

テキストファイルの先頭行と最終行を取得する最も効率的な方法は何ですか?

2023-11-08 23:15:30

質問

私は、各行にタイムスタンプを含むテキストファイルを持っています。私の目標は、時間範囲を見つけることです。すべての時間は、最初の行が最も早い時間になり、最後の行が最も遅い時間になるように、順番に並んでいます。必要なのは、一番最初の行と一番最後の行だけです。pythonでこれらの行を取得する最も効率的な方法は何ですか?

注:これらのファイルは長さが比較的大きく、それぞれ約1~2百万行で、私は数百のファイルについてこれをしなければなりません。

どのように解決するのですか?

ioモジュールのドキュメント

with open(fname, 'rb') as fh:
    first = next(fh).decode()

    fh.seek(-1024, 2)
    last = fh.readlines()[-1].decode()

ここでの変数の値は1024です:これは平均的な文字列の長さを表します。例として1024を選びました。もし平均的な線の長さの見積もりがあれば、その値×2を使えばよいでしょう。

行の長さの上限について何もわからないので、明らかな解決策は、ファイルをループすることです。

for line in fh:
    pass
last = line

バイナリフラグをわざわざ指定する必要はなく、単に open(fname) .

ETA : 作業するファイルが多いので、数十ファイル分のサンプルを random.sample を使って数十個のファイルのサンプルを作成し、それらに対してこのコードを実行して最終行の長さを決定することができます。位置のずれを先験的に大きな値 (たとえば 1 MB) で指定します。これは、完全な実行のための値を推定するのに役立ちます。