Как удалить строку из файла python
Перейти к содержимому

Как удалить строку из файла python

использование Python для удаления определенной строки в файле

Допустим, у меня есть текстовый файл, полный псевдонимов. Как я могу удалить определенный ник из этого файла, используя Python?

15 ответов

Сначала откройте файл и получите все свои строки из файла. Затем снова откройте файл в режиме записи и запишите свои строки обратно, за исключением строки, которую вы хотите удалить:

Вам нужно strip(«\n») символ новой строки в сравнении, потому что если ваш файл не заканчивается символом новой строки, самый последний line тоже не будет.

Возьмите содержимое файла, разбейте его на новую строку в кортеж. Затем получите доступ к номеру строки вашего кортежа, присоедините его к кортежу результата и перезапишите файл.

Возможно, вы уже получили правильный ответ, но здесь мой. Вместо того чтобы использовать список для сбора нефильтрованных данных (что делает метод readlines() ), я использую два файла. Один предназначен для хранения основных данных, а второй — для фильтрации данных при удалении определенной строки. Вот код:

Надеюсь, вы найдете это полезным! 🙂

В общем, вы не можете; Вы должны написать весь файл снова (по крайней мере, с момента изменения до конца).

В некоторых конкретных случаях вы можете сделать лучше, чем это —

Если все ваши элементы данных имеют одинаковую длину и не в определенном порядке, и вы знаете смещение того, от которого хотите избавиться, вы можете скопировать последний элемент поверх того, который нужно удалить, и обрезать файл до последнего элемента ;

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

Это, вероятно, излишне для коротких документов (что-нибудь под 100 КБ?).

Вот еще один метод, чтобы удалить / некоторые строки из файла:

Проблема с чтением строк на первом проходе и внесением изменений (удалением определенных строк) на втором проходе заключается в том, что если у вас большие размеры файлов, вам не хватит оперативной памяти. Вместо этого, лучший подход — читать строки по одной и записывать их в отдельный файл, исключая ненужные. Я использовал этот подход для файлов размером 12-50 ГБ, и использование ОЗУ остается практически постоянным. Только циклы процессора показывают обработку в процессе.

Мне нравится этот метод с использованием fileinput и метода «inplace»:

Это немного менее многословно, чем другие ответы и достаточно быстро для

Сохраните строки файла в списке, затем удалите из списка строку, которую хотите удалить, и запишите оставшиеся строки в новый файл.

Это «ответвление» от ответа @Lother (который, я считаю, следует считать правильным ответом).

Для такого файла:

Эта вилка из решения Лотера отлично работает:

  • with open , который отказывается от использования f.close()
  • более понятный if/else для оценки, если строка не присутствует в текущей строке

Я думаю, что если вы прочитаете файл в список, то выполните итерацию по списку, чтобы найти псевдоним, от которого вы хотите избавиться. Вы можете сделать это очень эффективно, не создавая дополнительные файлы, но вам придется записать результат обратно в исходный файл.

Вот как я могу это сделать:

Я предполагаю, что nicknames.csv содержит такие данные:

Затем загрузите файл в список:

Далее, переходим к списку, чтобы соответствовать вашим входам для удаления:

Наконец, запишите результат обратно в файл:

Решение этой проблемы только с одним открытием:

Это решение открывает файл в режиме r / w («r +») и использует поиск, чтобы сбросить f-указатель, а затем усечь, чтобы удалить все после последней записи.

Если вы используете Linux, вы можете попробовать следующий подход.
Предположим, у вас есть текстовый файл с именем animal.txt :

Удалить первую строку:

Мне понравился подход fileinput, как объяснено в этом ответе: Удаление строки из текстового файла (python)

Например, у меня есть файл с пустыми строками, и я хочу удалить пустые строки, вот как я решил это:

Примечание: пустые строки в моем случае имели длину 1

Вы можете использовать библиотеку re

Предполагая, что вы можете загрузить свой полный текстовый файл. Затем вы определяете список нежелательных псевдонимов, а затем заменяете их пустой строкой «».

Лучший и самый быстрый вариант, вместо того, чтобы хранить все в списке и заново открывать файл, чтобы записать его, — по моему мнению, переписать файл в другом месте.

Это оно! В одном цикле и только один вы можете сделать то же самое. Это будет намного быстрее.

Удаление определенной строки в файле (python)

допустим, у меня есть текстовый файл, полный псевдонимов, как я могу удалить конкретный псевдоним из этого файла?

13 ответов

предполагая, что ваш файл имеет формат одного псевдонима на строку, используйте это.

Сначала откройте файл:

далее, Получить все строки из файла:

теперь вы можете закрыть файл:

и снова открыть его в режиме записи:

затем напишите свои строки обратно, кроме строки, которую вы хотите удалить. Возможно, вы захотите изменить «\n» к любой строке, заканчивающейся вашим файлом.

At конец, закройте файл снова.

решение этой проблемы только один:

Это решение открывает файл в режиме r / w («r+») и использует seek для сброса F-указателя, а затем усекает, чтобы удалить все после последней записи.

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

вот именно! В одном цикле, и только вы можете сделать то же самое. Это будет намного быстрее.

это «вилка» от @Lotherответ (который я считаю, что следует считать правильным ответом).

Для такого файла:

эта вилка из решения Lother отлично работает:

  • with open , которые отбрасывают использование f.close()
  • более яснее if/else для оценки, если строка отсутствует в текущей строке

проблема с чтением строк в первом проходе и внесением изменений (удаление определенных строк) во втором проходе заключается в том, что если размеры файлов огромны, у вас закончится ОЗУ. Вместо этого лучше читать строки одну за другой и записывать их в отдельный файл, исключая те, которые вам не нужны. Я запустил этот подход с файлами размером 12-50 ГБ, и использование ОЗУ остается почти постоянным. Только циклы CPU показывают, что обработка продолжается.

если вы используете Linux, вы можете попробовать следующий подход.
Предположим, у вас есть текстовый файл с именем animal.txt :

удалить первую строку:

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

вот как я мог бы это сделать:

Я предполагаю, что nicknames.csv содержит такие данные, как:

затем загрузите файл в список:

далее, повторите список чтобы соответствовать вашим входам для удаления:

наконец, записать результат обратно в файл:

не очень хорошо решить, если вы поместите весь файл в память, я знаю, что в настоящее время у всех есть тонны памяти, но подумайте, если файл несколько ГБ журналов или что-то еще.

лучший способ скопировать его строка за строкой в новый файл, чем удалить первый или что-то вроде этого

В общем, вы не можете; вы должны написать весь файл снова (по крайней мере, с момента изменения до конца).

в некоторых случаях вы можете сделать лучше, чем это —

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

или вы можете просто перезаписать фрагмент данных с помощью значения «это плохие данные, пропустите его» или сохраните флаг «этот элемент был удален»в сохраненных элементах данных, чтобы вы могли пометить его удаленным без изменения файла.

Это, вероятно, перебор для коротких документов (что-нибудь под 100 КБ?).

Мне понравился подход fileinput, как описано в этот ответ: удаление строки из текстового файла (python)

скажем, например, у меня есть файл, в котором есть пустые строки, и я хочу удалить пустые строки, Вот как я его решил:

Примечание: пустые строки в моем случае имели длину 1

Наверное, вы уже получили правильный ответ,но вот мой. Вместо того, чтобы использовать список для сбора нефильтрованных данных (что readlines() метод), я использую два файла. Один предназначен для хранения основных данных, а второй-для фильтрации данных при удалении определенной строки. Вот код:

надеюсь, вы найдете это полезным! 🙂

сохраните строки файла в списке, затем удалите из списка строку, которую вы хотите удалить, и запишите оставшиеся строки в новый файл

возьмите содержимое файла, разделите его по новой строке на кортеж. Затем получите доступ к номеру строки кортежа, присоединитесь к кортежу результата и перезапишите файл.

Как удалить определённую строку из .txt файла

Я хочу найти в файле users.txt определённую строку (например, СОДЕРЖАЩУЮ «Привет» ), и удалить эту строку. Я облазил всё — ничего не нашел с моим случаем. И да — покажите легко, не нужно делать огромные непонятные коды. Задача проста — найти и удалить определённую строку из .txt файла

Открываем файл для чтения.
Сохраняем все строки в массив lines

Открываем файл для записи.
Проходим по массиву строк и сравниваем с искомой строкой.
Если строка не найдена — записываем строку в файл.

UPD. С учетом предложений @MaxU

Или почти тоже самое, но в один проход (но я за первый вариант)

user avatar

Читайте из одного файла, записывайте в другой файл:

После этого вы можете переименовать выводной файл:

Пример вводного файла users.txt :

В результате будет файл users.txt таким:

Вместо if FIND not in line: возможно использовать if FIND.lower() not in line.lower(): , чтобы не делать разницу между строчными и прописными буквами. Тогда результат будет

user avatar

Столкнулся с похожим вопросом: есть файл с исходным текстом, нужно удалить из него строки, в начале которых нет определенных слов, а затем результат поместить в новый файл.

Поскольку del для строк применять нельзя, пошел другим путем: заменил содержимое строки на пробел (чем не очищение?), а затем убрал пробел методом strip :

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *