15

大きなファイル(数百MB)がある場合、Pythonを使用して、ファイル内の特定の開始インデックスと終了インデックスの間のコンテンツをすばやく読み取るにはどうすればよいですか?

基本的に、私はより効率的な方法を探しています。

open(filename).read()[start_index:end_index]
4

2 に答える 2

30

seekファイルにファイルを挿入し、そこから一定量を読み取ることができます。Seekを使用すると、ファイル内の特定のオフセットに到達でき、読み取りをその範囲内のバイト数のみに制限できます。

with open(filename) as fin:
    fin.seek(start_index)
    data = fin.read(end_index - start_index)

それはあなたが探しているそのデータだけを読みます。

于 2013-03-26T18:38:56.977 に答える
1

これは、可変幅エンコーディングを使用した私のソリューションです。私のCSVファイルには、各行が新しいアイテムである辞書が含まれています。

def get_stuff(filename, count, start_index):
    with open(filename, 'r') as infile:
             reader = csv.reader(infile)
             num = 0 
             for idx, row in enumerate(reader):
                 if idx >= start_index-1:
                     if num >= count:
                         return
                 else:
                     yield row 
                     num += 1
于 2019-06-28T14:05:08.873 に答える