大きなファイル(数百MB)がある場合、Pythonを使用して、ファイル内の特定の開始インデックスと終了インデックスの間のコンテンツをすばやく読み取るにはどうすればよいですか?
基本的に、私はより効率的な方法を探しています。
open(filename).read()[start_index:end_index]
seek
ファイルにファイルを挿入し、そこから一定量を読み取ることができます。Seekを使用すると、ファイル内の特定のオフセットに到達でき、読み取りをその範囲内のバイト数のみに制限できます。
with open(filename) as fin:
fin.seek(start_index)
data = fin.read(end_index - start_index)
それはあなたが探しているそのデータだけを読みます。
これは、可変幅エンコーディングを使用した私のソリューションです。私の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