2016-07-29 8 views
0

は、私は次の形式でのテキストのn行を含むテキストファイルがあります:私はline_n_minus_1までのラインのすべての連続したペア、(その上すなわちline_1line_2line_2line_3とを抽出したいファイルから一度に連続するすべての行のペアを効率的に抽出するにはどうすればよいですか?

line_1 
line_2 
line_3 
. 
. 
. 
line_n_minus_1 
line_n 

をし、 line_n)、各抽出されたペアで何かを行い、line_n_minus_1line_nまでこれを続けます。大容量のファイルに対してこれを効率的に実行するにはどうすればよいですか?

これは私が考えていたものです:私は潜在的に大きなテキストファイルで作業するつもりですので、

from itertools import tee, izip 

def pairwise(iterable): 
    "s -> (s0,s1), (s1,s2), (s2, s3), ..." 
    a, b = tee(iterable) 
    next(b, None) 
    return izip(a, b) 

with open("file.txt","r") as f: 
    list_of_lines = f.readlines() 
    for i in pairwise(list_of_lines): 
     # do something with the pair tuple i 

はしかし、私は、readlines()に頼ることが嫌い。これを行うより良い方法はありますか?

答えて

1

代わりのreadlinesを使用して、あなたがメモリにファイル全体をロードする必要はありませんので、ジェネレータを作成します。

. 
. 
. 
with open('a.txt') as f: 
    list_of_lines = (line for line in f) 
    . 
    . 
    . 
+0

ありがとうございました!これは多くの助けとなりました。 –

関連する問題