2012-02-08 14 views
1

可能性の重複:
Python: How to read huge text file into memory行ベースのファイル読み込み用のPythonライブラリはありますか?

線によって大きなテキストファイル(1G +)ラインを処理するために、任意の行数によってランダムアクセスがファイル全体をロードせず、最も重要なことは、望まれていますコンテンツをRAMに保存します。それを行うためのPythonライブラリはありますか?

大規模なログファイルを分析する場合は、読み取り専用で十分です。

このような標準ライブラリがない場合は、別の方法を模索する必要があります。サブストリングのN番目の行を大きな文字列のようなオブジェクトから返すことができる関数/クラスのセットを見つけて、 mmap(はい、私はメモリマップされたファイルオブジェクトを意味することができます)ファイルをそのオブジェクトにし、ラインベースの処理を行います。

ありがとうございます。

PS:ログファイルの可変長はほぼ確実です。

+0

を行うことができますが、同じ長さのすべての行はありますか? –

+2

ファイルを前処理してソートのインデックスを作成できますか? – anijhaw

答えて

1

私は以下のようなものが一度に1行を読み込みreadline()file objectの方法から、うまくいくかもしれないと思い。線が任意の長さの場合、次のように位置をインデックスする必要があります。

lines = [0] 
with open("testmat.txt") as f: 
    while f.readline(): 
     lines.append(f.tell()) 
    # now you can read an arbitrary line: 
    f.seek(lines[1235]) 
    line = f.readline() 

ラインが同じ長さであった場合、あなただけのf.seek(linenumber*linelenght)

+1

これは@anijhawが参照した「ソートのインデックス」のように見えます。 –

+0

@JimDeLaHunt - はい、そうです。 – Kimvais

関連する問題