2017-02-23 28 views
0

私は非常に大きなテキストファイルのセクションを読む必要があります。行はN行からN + Xまでです。 私は "open( 'file')"を使いたくありません。これはメモリに全体を書き込むので時間がかかり過ぎてメモリが浪費されるからです。 はへの道が..ですファイルを開かずに最初のN行を読む(Python)

section = subprocess.check_output('tail -n-N {filePath} | head -n X') 

しかしである、それを行うためのよりスマートな方法がなければならないように感じている: 私のスクリプトは、Unixマシン上で動作するので、私は現在、ネイティブの頭と尾の機能、すなわちを使用しますファイル全体を開くことなく、PythonのテキストファイルのNからNまでのN行を取得しますか?

ありがとうございます!

+0

*「私はしたくありません。 "open( 'file')"を使用してください。これはメモリにすべてのものを書き込むため、時間がかかり過ぎてメモリがあまりにも浪費されるからです。これを使って。 – Ryan

答えて

2

Pythonのislice()は、これを行うに適しています:

from itertools import islice 

N = 2 
X = 5 

with open('large_file.txt') as f_input: 
    for row in islice(f_input, N-1, N+X): 
     print row.strip() 

これは、最初の行のすべてをスキップし、ちょうどあなたが興味を持っている行を返します

3

あなたの質問への答えがここにあります。How to read large file, line by line in python

with open(...) as f: 
    for line in f: 
     <do something with line> 

文では 例外は、内側のブロックで提起された場合を含め、ファイルを開いたり閉じたり処理します。 for行のfは、 ファイルオブジェクトfを反復可能ファイルとして扱います。このオブジェクトはバッファされたIO を自動的に使用し、大きなファイルについて心配する必要はありません。

関連する問題