2014-09-12 8 views
0

Я практикую свои навыки питона, написав программу телефонной книги. Я могу искать и добавлять записи, но у меня много проблем с удалением записей.Как удалить несколько строк в текстовом файле с помощью 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

+0

Я хочу удалить строку, которую я ищу, и следующие 4 строки после нее. –

+0

Итак, каждая запись имеет 5 строк? – ppalacios

ответ

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, 

Для того, чтобы избежать чтения всего файла в память, это обрабатывает некоторые вещи в фоновом режиме для вас - он перемещает ваш исходный файл в tempfile, записывает новый файл и затем удаляет временный файл.

Вероятно, лучший ответ: похоже, что вы сделали ручное сериализационное решение. Подумайте о том, чтобы использовать встроенную библиотеку, такую ​​как csv, json, shelve или даже sqlite3, чтобы сохранить ваши данные в удобном для работы формате.

+0

Это сработало для меня. Спасибо за помощь! Единственная проблема, с которой это связано, - это что-то в строке. Поэтому, если у меня есть тест и test2, они оба будут удалены. –

+1

@ChrisJones, тогда вам нужно будет быть более сложным относительно вашего соответствия, используя 're.search'. Я не могу помочь вам написать это, так как я не знаю формат вашего файла или то, что вы ищете. – roippi

+0

Я думал, что это работает, но он удаляет все после того, как находит совпадение, а не только 5 строк. Я не думал использовать регулярные выражения. Я попробую. Еще раз спасибо. –

Смежные вопросы