#python
Вопрос:
Есть ли способ открыть текстовый файл, найти слово, удалить строку со словом и следующие 6 строк из него?
Ответ №1:
Здесь я объясню логику file
редактирования с помощью различных разделов:
Сначала мы открываем файл в read write mode
, потому что r doesn't overwrite the previously written file
f = open("file.txt", 'r')
content = f.read()
Затем мы split
разделяем его на различные линии
lines_ = content.split('n')[::-1]
word = input('Enter your words : ')
Примените логику, чтобы удалить строку слова maatch и 6 последовательных строк.
for i, j in zip(range(len(lines_)), lines_):
if word in j:
for k in range(7):
if i > abs(k):
del lines_[i-k]
file_ = 'n'.join(lines_[::-1])
f.close()
Снова мы открываем файл, чтобы записать эту обновленную строку обратно в файл, поэтому мы используем w write mode
, который сначала очищает файл, а затем помещает в него строку
with open("file.txt", 'w') as f:
f.write(file_)
Комментарии:
1. Добро пожаловать! Я рад, что помогаю вам. Пожалуйста, следуйте
Stack Overflow
инструкциям во время допроса.2. Я бы предложил использовать ‘r’ для открытия файла — нам нужно только читать, запись не используется. Также вы предложили
with open()
в конце, что это «питонский способ», но вы не сделали этого при открытии файла для чтения и в начале. @ExplooreX3. спасибо за этот момент, который я добавлю. Но для ясного объяснения я разделяю это на разделы, поэтому без какого-либо рассмотрения
fileNotFound Error
или пространства имен.4. Также, когда речь идет об удалении, я бы предложил читать строки от конца до начала, чтобы мы не пропускали совпадения при удалении предыдущего совпадения. Представьте, что у нас есть 10 строк, а волшебное слово находится в строках 1 и 5 — если мы начнем удалять с самого начала, мы удалим второе волшебное слово и оставим больше строк
5. Спасибо за ваш ответ, он не работал раньше, но получил его сейчас. Спасибо!!!!!!!
Ответ №2:
Это должно сработать
def look_and_delete(file,word_to_look_for):
files = open(file,'r')
contents = files.readlines()
print(contents)
line = 0
file_words = ''
for i in contents:
print(i)
if word_to_look_for in i:
print("im in here on line", line)
else:
file_words =i
line =1
print(file_words)
files.close()
files = open(file,'w')
files.write(file_words)
files.close()
Не стесняйтесь удалять заявление о печати, они не имеют значения
Комментарии:
1. Да, это работает, если вы хотите заменить или удалить 1 строку из документа, но я хотел удалить строку со словом 5 строк. Спасибо за ваш ответ, тхо!
Ответ №3:
Я бы подошел к этому по — другому
: Сначала откройте файл и прочитайте строки для последующего, n=5
значит-удалите 5 строк, включая строку с волшебным словом.
magic_word = 'foo'
n = 5
with open('file.txt', 'r') as file_handle:
lines = file_handle.readlines()
num_lines = len(lines)
Далее мы перечисляем по строкам, но в обратном порядке. Это очень важно для углового случая, например:
Если мы примем такой вклад:
test1
foo
test2
test3
test4
foo
test5
test6
test7
test8
Чтение файла от начала до конца (пусть n=5
) и поиск волшебного слова приведет к выходу:
test1
test5
test6
test7
test8
Но если мы посмотрим и удалим с другого конца, то результат будет:
test1
Вот почему мы должны чтить орден.
strip
это просто для того, чтобы мы могли удалитьn
перед сравнением.
for idx, word in enumerate(reversed(lines)):
# now going from the end of a file
word = word.strip()
Когда мы находим волшебное слово, мы должны удалить n
строку из этой точки до конца файла. Самая простая операция для удаления частей итерируемого в python-это нарезка
например,
obj[1:5]
вырезать объекты в диапазоне<1,5>
илиobj[:5]
вырезать объекты в диапазоне<0,5>
if word == magic_word:
left_bound = num_lines-idx-1
if left_bound n >= num_lines:
lines = lines[:left_bound]
else:
lines = lines[:left_bound] lines[left_bound n:]
Все, что осталось, это сохранить файл(переопределить)
with open('file.txt', 'w') as file_handle:
lines = file_handle.writelines(lines)
Комментарии:
1. Ты сломал мне мозг этим решением, я не понимаю его так, как мне нужно, и это также не сработает для меня. Все равно огромное спасибо вам, потому что вы подали мне несколько идей, чтобы попробовать и узнать больше!
2. @Jenby32 если вы сочтете это полезным, я был бы признателен за отзыв 🙂
3. О да, это был не тот ответ, который мне нужен, но он мне помог. Спасибо! 😀