2017-05-31 50 views
0

我應該找到一些行。我寫了劇本。我有一個文件,我應該在哪裏找到線dukePython grep單詞並在此單詞之前顯示行

#!/usr/bin/python3.5 

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

一切正常。但是如何在這個結果之前看到2行?

在grep中是grep -B 2 "duke" test.txt。我如何在Python中做同樣的事情?

回答

1

你需要保持與N-先前行緩衝器(在這種情況下,N = 2)。例如:

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

可以使用deque爲2的固定大小:

#!/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'打印兩行前加** **當前行,要達到這個你應該把'queue.append(線)''之前和if'增加'maxlen'到3,或者在print(list(queue))之後加上'print(line)'。 –

+1

我認爲調整數字和重新排列邏輯是一件不錯的功課;) – tamasgal

相關問題