2015-09-16 66 views
1

後,我是新來的蟒蛇試圖寫一個腳本匹配的字符串前後和5複製5個系被發現複製幾行之前和匹配字符串在python

import re 

text_file = open(input("Input-file name : ") , "r") 
fi = text_file.readlines() 

test = re.compile(r'matching character') 

for i in range (len(fi)): 
    if test.search(fi[i]): 
     print(fi[max(0, i-5)]) 
     print(fi[max(0, i-4)]) 
     print(fi[max(0, i-3)]) 
     print(fi[max(0, i-2)]) 
     print(fi[max(0, i-1)]) 
     print(fi[max(0, i-0)]) 
     print(fi[max(0, i+1)]) 
     print(fi[max(0, i+2)]) 
     print(fi[max(0, i+3)]) 
     print(fi[max(0, i+4)]) 

有沒有更好的辦法比添加多個打印語句來獲得一個命令的輸出。

回答

1

假設匹配的行包含在「之後的」 5條線路,然後:

block = fi[max(0, i - 5): min(len(fi), i + 5)] 

會給你行的列表。打印的清單作爲一個塊,你可以這樣做:

print(''.join(block)) 
+0

非常感謝,它的工作就像一個魅力..... – Zoro99

+0

多一點幫助...有沒有辦法,我可以得到用戶輸入如何他想在變量中使用許多行,並在塊命令中使用它。我試圖 X =輸入( 「錯誤後的行數: 」) Y =輸入(「 錯誤後的行數:」) 爲i的範圍(LEN(FI)): \t如果SRB (''.join(block)).search(fi [i]) \t \t 這沒有工作,並給出了一個錯誤,說明STR和INT不能一起使用 – Zoro99

+0

@ Zoro99。 'input()'返回的值是一個字符串。要將其轉換爲整數,例如'x = int(x)'。 – ekhumoro

相關問題