2014-09-12 49 views
0

我正在通過編寫電話簿程序來練習我的Python技能。我能夠搜索和添加條目,但我在刪除條目時遇到了很多問題。如何用python刪除文本文件中的多行?

我想找到一條符合我的搜索條件的行,並將其刪除以及接下來的4行。我有這裏刪除的功能:

def delete(): 
    del_name = raw_input("What is the first name of the person you would like to delete? ") 
    with open("phonebook.txt", "r+") as f: 
      deletelines = f.readlines() 
      for i, line in enumerate(deletelines): 
       if del_name in line: 
        for l in deletelines[i+1:i+4]: 
         f.write(l) 

這是行不通的。

如何從這樣的文本文件中刪除多個條目?

+0

是否要刪除具有相同名稱的多個條目,是嗎? – ppalacios 2014-09-12 19:36:17

+0

我想刪除我搜索的一條線和其後的四條線。 – 2014-09-12 19:40:57

+0

那麼,每個條目有5行? – ppalacios 2014-09-12 19:45:21

回答

1

回答你直接的問題:你可以使用fileinput輕鬆改變就地文本文件:

import fileinput 
file = fileinput.input('phonebook.txt', inplace=True) 

for line in file: 
    if word_to_find in line: 
     for _ in range(4): # skip this line and next 4 lines 
      next(file, None) 
    else: 
     print line, 

爲了避免整個文件讀入內存,這個處理一些事情在後臺爲你 - 它將原始文件移動到臨時文件,寫入新文件,然後刪除臨時文件。

可能更好的答案:它看起來像你已經推出了自制的序列化解決方案。考慮使用像csv,json,shelve或甚至sqlite3這樣的內置庫來將數據保存爲易於使用的格式。

+0

這對我有用。謝謝您的幫助! 它給我的唯一問題是匹配任何行。所以,如果我有測試和測試2,他們都將被刪除。 – 2014-09-12 20:08:07

+1

@ChrisJones那麼你需要使用're.search'對你的匹配進行更復雜的處理。我不能幫你寫,因爲我不知道你的文件格式或你正在搜索的東西。 – roippi 2014-09-12 22:03:53

+0

我認爲這是行得通的,但它在找到匹配之後刪除所有內容,而不僅僅是5行。 我不認爲使用正則表達式。我會嘗試一下。再次感謝。 – 2014-09-12 22:16:39