2017-05-31 2 views
0

Ich sollte eine Zeile finden. Ich habe ein Skript geschrieben. Ich habe eine Datei, wo ich Zeile dukePython Grep Wort und Zeile vor diesem Wort

finden sollte
#!/usr/bin/python3.5 

for line in open('test.txt'): 
    if 'duke' in line: 
     print(line) 

Alles ist in Ordnung. Aber wie kann ich 2 Zeilen vor diesem Ergebnis sehen?

In Grep war es grep -B 2 "duke" test.txt. Wie kann ich das gleiche in Python tun?

Antwort

1

Sie benötigen einen Puffer mit N vorhergehenden Zeilen zu halten (in diesem Fall N = 2). Beispiel:

N=2 
buffer = [] 
for line in open('test.txt'): 
    buffer.append(line) 
    if len(buffer) > N: 
     buffer.pop(0) 
    if 'duke' in line: 
     print(buffer) 
1

Sie können ein deque mit einer festen Größe von 2 verwenden:

#!/usr/bin/python3.5 
from collections import deque 

queue = deque(maxlen=2) 

for line in open('test.txt'): 
    if 'duke' in line: 
     print(list(queue)) 
    queue.append(line) 
+0

'grep -B 2' druckt zwei vorhergehenden Zeilen ** plus ** die aktuelle Zeile, um dies zu erreichen Sie setzen' queue.append (line) sollte '' vor if' und erhöhen 'maxlen' bis 3, oder fügen Sie einfach 'print (line)' nach 'print (list (queue))' hinzu. –

+1

Ich denke, die Anpassung der Zahlen und Neuordnung der Logik ist eine nette Hausaufgabe;) – tamasgal