2013-01-14 22 views
0

找到關鍵字「banana」的特定行後,我想刪除後續行,在本例中爲「berry」。如何在使用Python中的特定關鍵字的行後刪除後續行

Sample.txt的

orange 
apple 
banana 
berry 
melon 

我的劇本,但是,刪除 「香蕉」 不是 「漿果」 ......爲什麼?

import fileinput 

filename = r"C:\sample.txt" 
for linenum,line in enumerate(fileinput.FileInput(filename, inplace=1)): 
    if "banana" in line: 
     counter = linenum + 1 
     if linenum == counter: 
      line.strip() 
    else: 
     print line, 
+0

首先,這個腳本從來沒有刪除任何東西,實際上,我能看到的是它打印文件中的任何行,除非'香蕉'在行中,在這種情況下,它會增加一個計數器然後從當前行的末尾剝去空白......我建議你閱讀一下你的python技巧,因爲這沒有做任何事情。 –

+0

@inbar:它確實刪除了包含關鍵字的行。 – fairyberry

+0

當你說'刪除'時,你的意思是'filter'嗎? –

回答

3

做這樣的:

import fileinput 

fin = fileinput.input('/home/jon/text.txt', inplace=1) 
for line in fin: 
    print line, 
    if line.strip() == 'banana': 
     next(fin, None) # as suggested by @thg435 doesn't hurt to use default to avoid StopIteration (as next iteration will just be a no-op anyway) 

這種利用迭代fin對象,因此它不會看到下一行的 - 這意味着你不必擔心設置/取消設置標誌...(可能導致錯誤)

+1

我會使用'next以防萬一),以防萬一。 – georg

+0

@ thg435喲,那絕對不會傷害... –

+0

@Jon:哇。涼。非常感謝。 – fairyberry

2

事情是這樣的:

flag = False 
with open("C:\sample.txt") as in_f: 
    for line in in_f: 
     if flag: # previous line have "banana", so skip this line 
      flag = False 
      continue 
     if "banana" in line: # set flag to skip line 
      flag = True 
     print line 
+1

將__pring__更改爲'print' – Matthias

+0

@cleg:感謝您的建議。我從來不知道你可以使用那樣的「旗幟」。良好的學習經驗。再次感謝。 – fairyberry

+0

@Inbar:我明白了。好的觀察。雖然,只要我可以打印除我想要刪除的行外的所有行,那麼它將幫助我重寫除了那個行之外的文件。謝謝。 – fairyberry

1

請嘗試th是

filename = r"sample.txt" 
counter = -1 
for linenum,line in enumerate(fileinput.FileInput(filename, inplace=1)): 
    if "banana" in line: 
     counter = linenum + 1 
    if linenum == counter: 
     line.strip() 
    else: 
     print line, 
+0

它的作品!我想知道爲什麼你把「counter = -1」? – fairyberry

相關問題