2016-07-29 38 views
0

我有一个包含以下形式n行文本的文本文件:如何从文件中有效地提取每一对连续的行?

line_1 
line_2 
line_3 
. 
. 
. 
line_n_minus_1 
line_n 

我希望提取每个连续对线(即line_1line_2line_2line_3等等,直到line_n_minus_1line_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

谢谢!这帮了很多。 –

相关问题