How to delete a specific line in a text file using Python?
Let’s say I have a text file full of nicknames. How can I delete a specific nickname from this file, using Python?
18 Answers 18
First, open the file and get all your lines from the file. Then reopen the file in write mode and write your lines back, except for the line you want to delete:
You need to strip(«\n») the newline character in the comparison because if your file doesn’t end with a newline character the very last line won’t either.
Solution to this problem with only a single open:
This solution opens the file in r/w mode («r+») and makes use of seek to reset the f-pointer then truncate to remove everything after the last write.
The best and fastest option, rather than storing everything in a list and re-opening the file to write it, is in my opinion to re-write the file elsewhere.
That’s it! In one loop and one only you can do the same thing. It will be much faster.
This is a "fork" from @Lother‘s answer (should be considered the right answer).
For a file like this:
- with open , which discards the usage of f.close()
- more clearer if/else for evaluating if string is not present in the current line
The issue with reading lines in first pass and making changes (deleting specific lines) in the second pass is that if you file sizes are huge, you will run out of RAM. Instead, a better approach is to read lines, one by one, and write them into a separate file, eliminating the ones you don’t need. I have run this approach with files as big as 12-50 GB, and the RAM usage remains almost constant. Only CPU cycles show processing in progress.
If you use Linux, you can try the following approach.
Suppose you have a text file named animal.txt :
Delete the first line:
I liked the fileinput approach as explained in this answer: Deleting a line from a text file (python)
Say for example I have a file which has empty lines in it and I want to remove empty lines, here’s how I solved it:
Note: The empty lines in my case had length 1
Probably, you already got a correct answer, but here is mine. Instead of using a list to collect unfiltered data (what readlines() method does), I use two files. One is for hold a main data, and the second is for filtering the data when you delete a specific string. Here is a code:
Hope you will find this useful! 🙂
I think if you read the file into a list, then do the you can iterate over the list to look for the nickname you want to get rid of. You can do it much efficiently without creating additional files, but you’ll have to write the result back to the source file.
Here’s how I might do this:
I’m assuming nicknames.csv contains data like:
Then load the file into the list:
Next, iterate over to list to match your inputs to delete:
Lastly, write the result back to file:
A simple solution not been proposed :
Inspired of precedent answers
In general, you can’t; you have to write the whole file again (at least from the point of change to the end).
In some specific cases you can do better than this —
if all your data elements are the same length and in no specific order, and you know the offset of the one you want to get rid of, you could copy the last item over the one to be deleted and truncate the file before the last item;
or you could just overwrite the data chunk with a ‘this is bad data, skip it’ value or keep a ‘this item has been deleted’ flag in your saved data elements such that you can mark it deleted without otherwise modifying the file.
Python-сообщество
Скажите как выполнить удаление строк из файла?
Я только постигаю азы. Это первая программа, особо не пинайте короч…
Надо, что бы перед циклом сработало удаление первой, второй и последней строк.
#2 Ноя. 21, 2013 14:01:32
Удалить строку из файла
никак, можно только перезаписать файл
#3 Ноя. 21, 2013 14:21:09
Удалить строку из файла
А с перезаписью это как будет выглядеть?
#4 Ноя. 21, 2013 15:08:48
Удалить строку из файла
читаешь файл в список. из списка удалеяешь элементы с необходимыми индексами (номера строк) и запусываешь полученный список в файл
использование Python для удаления определенной строки в файле
Скажем, у меня есть текстовый файл, полный псевдонимов, как я могу удалить определенный псевдоним из этого файла?
13 ответов
Предполагая, что ваш файл находится в формате одного псевдонима для каждой строки, используйте это.
Сначала откройте файл:
Далее, получите все ваши строки из файла:
Теперь вы можете закрыть файл:
И снова откройте его в режиме записи:
Затем запишите строки, кроме строки, которую вы хотите удалить. Возможно, вы захотите изменить «\n» на любую строку, заканчивающую использование вашего файла.
В конце закройте файл еще раз.
Решение этой проблемы только с одним открытым:
Это решение открывает файл в режиме r/w ( «r +» ) и использует поиск reset f-указателя, а затем усекает, чтобы удалить все после последней записи.
Самый лучший и быстрый вариант, а не сохранение всего в списке и повторное открытие файла для его записи, на мой взгляд, переписать файл в другом месте.
Что это! В одном цикле и один вы можете сделать то же самое. Это будет намного быстрее.
Проблема с чтением строк в первом проходе и внесением изменений (удаление определенных строк) во втором проходе заключается в том, что если размеры файлов огромны, у вас закончится ОЗУ. Вместо этого лучший подход состоит в том, чтобы читать строки один за другим и записывать их в отдельный файл, исключая те, которые вам не нужны. Я использовал этот подход с файлами размером до 12-50 ГБ, а использование ОЗУ остается практически неизменным. Только циклы ЦП показывают, что процесс обработки продолжается.
Это «fork» основано на решении, представленном @Lother здесь, которое, я считаю, следует считать правильным ответом.
Для файла с таким содержимым:
Эта вилка от решения Lother работает нормально:
Основным преимуществом является использование with open , которые отбрасывают использование f.close() , а также способ, которым script оценивает, содержит ли строка строку.
Не удастся решить, если вы поместили целый файл в память, я знаю, что в наши дни у всех есть тонны памяти, но подумайте, есть ли в файле несколько ГБ журналов или что-то в этом роде.
Лучше всего скопировать его по строкам в новый файл, чем удалить первый или что-то подобное
Я думаю, что если вы прочитаете файл в списке, то сделайте так, чтобы вы могли перебирать список, чтобы искать прозвище, от которого вы хотите избавиться. Вы можете сделать это очень эффективно, не создавая дополнительные файлы, но вам придется записать результат обратно в исходный файл.
Вот как я могу это сделать:
Я предполагаю, что nicknames.csv содержит такие данные, как:
Затем загрузите файл в список:
Затем перейдите к списку в соответствии с вашими входом для удаления:
Наконец, запишите результат в файл:
Если вы используете Linux, вы можете попробовать следующий подход.
Предположим, у вас есть текстовый файл с именем animal.txt :
Удалить первую строку:
В общем, вы не можете; вам нужно снова написать весь файл (по крайней мере, с точки зрения изменения до конца).
В некоторых конкретных случаях вы можете сделать лучше, чем это —
если все ваши элементы данных имеют одинаковую длину и не имеют определенного порядка, и вы знаете смещение того, с которым хотите избавиться, вы можете скопировать последний элемент над тем, который нужно удалить, и обрезать файл до последний элемент;
или вы можете просто перезаписать блок данных значением «это плохие данные, пропустить» или сохранить флаг «этот элемент был удален» в ваших сохраненных элементах данных, чтобы вы могли пометить его, не изменяя при этом файл.
Это, вероятно, слишком много для коротких документов (что-то под 100 КБ?).
Как удалить строку в python
В рубрике «Готовые программы на языке python (скрипты, исходники)» сегодня представлен python скрипт «Как удалить строку из текстового файла в python?».
Рассмотрим скрипт «Как удалить строку из файла в python»:
Теперь мы стали чуть больше знать, как питоне (python) можно решить задачу «Как удалить строку из текстового файла в python».
Ещё больше python-рецептов (программ на языке python) смотрите в разделе «Python скрипты».
Если хотите поделиться своими python-скриптами, либо знаете, как улучшить предложенные python скрипты, либо заметили ошибку, пишите в обратную связь, либо оставляйте комментарии.