2016-07-29 21 views
0

Ich habe eine Textdatei n Textzeilen in der folgenden Form enthält:Wie extrahiere ich jedes aufeinanderfolgende Zeilenpaar effizient aus einer Datei?

line_1 
line_2 
line_3 
. 
. 
. 
line_n_minus_1 
line_n 

Ich wünsche jedes aufeinanderfolgende Paar von Linien zu extrahieren, (dh line_1 und line_2, line_2 und line_3 und so weiter, bis line_n_minus_1 und), tun Sie etwas mit jedem extrahierten Paar und machen Sie dies bis line_n_minus_1 und line_n. Wie würde ich bei großen Dateien effizient vorgehen?

das ist, was ich im Sinne hatte:

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 

aber ich hasse auf readlines() zu verlassen, da ich möglicherweise mit großen Textdateien arbeiten würde. Gibt es einen besseren Weg, dies zu tun?

Antwort

1

Statt readlines verwenden, erstellen Sie einen Generator, so dass Sie die gesamte Datei in den Speicher nicht geladen werden müssen:

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

Thank you! Das hat sehr geholfen. –

Verwandte Themen