
Работа с текстовыми файлами в Python часто требует точного удаления отдельных строк без изменения остальных данных. Для этого можно использовать стандартные методы чтения и записи файлов, позволяющие контролировать процесс построчно.
Удаление строки по номеру или по содержимому удобно реализовать через чтение файла в список строк с последующей фильтрацией. Метод readlines() позволяет получить все строки, а списковые включения list comprehension обеспечивают гибкость при выборе строк для удаления.
Если файл большой, использование временного файла снижает риск потери данных. В этом подходе строки, которые нужно оставить, записываются во временный файл, после чего старый файл заменяется новым. Такой способ подходит для логов, CSV и других текстовых форматов с большим объёмом информации.
Удаление пустых строк и строк с определёнными ключевыми словами помогает поддерживать структуру данных чистой и удобной для последующей обработки. Методы strip() и проверка наличия подстроки позволяют быстро фильтровать ненужные строки.
В статье рассмотрены практические примеры удаления строк с различными условиями и подходами, что позволяет выбрать оптимальный способ для конкретного проекта без использования сторонних библиотек.
Удаление строки по номеру в текстовом файле
Для удаления конкретной строки по её номеру в Python чаще всего используется комбинация методов open, readlines() и writelines(). Сначала файл открывается на чтение, все строки считываются в список, затем нужная строка удаляется по индексу, и список возвращается в файл.
Пример удаления третьей строки в файле data.txt:
| Код |
|---|
with open('data.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
del lines[2] # удаление третьей строки (индексация с 0)
with open('data.txt', 'w', encoding='utf-8') as file:
file.writelines(lines)
|
Важно учитывать, что индексация в Python начинается с нуля. Если строка с указанным номером отсутствует, попытка удаления вызовет ошибку IndexError. Чтобы избежать этого, можно проверять длину списка:
| Код с проверкой |
|---|
line_number = 3
with open('data.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
if 0 <= line_number - 1 < len(lines):
del lines[line_number - 1]
with open('data.txt', 'w', encoding='utf-8') as file:
file.writelines(lines)
|
Такой подход подходит для файлов небольшого и среднего размера. Для больших файлов рекомендуется использовать временный файл и построчную обработку, чтобы избежать высоких затрат памяти.
Удаление строк, содержащих определённое слово
Для удаления строк с конкретным словом используется чтение файла построчно и фильтрация с помощью проверки наличия подстроки. Метод in позволяет определить, содержит ли строка заданное слово, и исключить её из результирующего списка.
Пример удаления всех строк, содержащих слово «ошибка» в файле log.txt:
with open('log.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
filtered_lines = [line for line in lines if 'ошибка' not in line]
with open('log.txt', 'w', encoding='utf-8') as file:
file.writelines(filtered_lines)
Для учета регистра можно использовать метод lower():
keyword = 'ошибка'
with open('log.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
filtered_lines = [line for line in lines if keyword.lower() not in line.lower()]
with open('log.txt', 'w', encoding='utf-8') as file:
file.writelines(filtered_lines)
Такой способ подходит для текстовых и лог-файлов, где необходимо удалить строки с определёнными ключевыми словами без изменения остальных данных.
Удаление пустых строк из файла
Пример очистки файла data.txt от пустых строк:
with open('data.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
non_empty_lines = [line for line in lines if line.strip()]
with open('data.txt', 'w', encoding='utf-8') as file:
file.writelines(non_empty_lines)
Этот способ сохраняет порядок строк и удаляет все строки, которые содержат только пробелы, табуляции или символы перевода строки. Для больших файлов можно использовать построчную запись с открытием файла на чтение и запись одновременно, чтобы снизить потребление памяти.
Удаление строки при чтении файла построчно

Для больших файлов удобно обрабатывать данные построчно, чтобы не загружать весь файл в память. Такой подход позволяет сразу записывать нужные строки в новый файл или фильтровать их на лету.
Пример удаления строк с определённым словом при построчном чтении:
- Открываем исходный файл для чтения и временный файл для записи.
- Проходим по каждой строке исходного файла.
- Проверяем условие: строка не содержит заданного слова.
- Если условие выполнено, записываем строку во временный файл.
- После обработки заменяем исходный файл временным.
keyword = 'ошибка'
with open('log.txt', 'r', encoding='utf-8') as infile, \
open('log_temp.txt', 'w', encoding='utf-8') as outfile:
for line in infile:
if keyword not in line:
outfile.write(line)
import os
os.replace('log_temp.txt', 'log.txt')
Построчная обработка позволяет:
- Работать с файлами любого размера без перегрузки памяти.
- Удалять строки по условию без чтения всего файла.
- Сохранять структуру исходного файла, изменяя только ненужные строки.
Перезапись файла без выбранной строки
Перезапись файла позволяет удалить одну или несколько строк без создания дополнительного временного файла. Для этого файл читается в список строк, ненужные строки удаляются, затем файл открывается заново в режиме записи для сохранения изменений.
Пример удаления строки по номеру и перезаписи файла data.txt:
line_number = 3 # номер строки для удаления
with open('data.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
if 0 <= line_number - 1 < len(lines):
del lines[line_number - 1]
with open('data.txt', 'w', encoding='utf-8') as file:
file.writelines(lines)
При перезаписи файла важно:
- Сохранять кодировку исходного файла.
- Проверять, что индекс строки находится в пределах длины списка.
- Использовать методы readlines() и writelines() для точного контроля порядка строк.
Этот подход подходит для небольших и средних файлов, где допустимо временно хранить все строки в памяти.
Использование списковых включений для удаления строк

Списковые включения (list comprehension) позволяют быстро формировать новый список строк, исключая ненужные элементы, без необходимости писать циклы вручную. Это удобно для удаления строк по содержимому, по условию длины или других признаков.
Пример удаления всех строк, содержащих слово «удалить» из файла data.txt:
with open('data.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
lines = [line for line in lines if 'удалить' not in line]
with open('data.txt', 'w', encoding='utf-8') as file:
file.writelines(lines)
Списковые включения позволяют:
- Удалять строки без создания временного файла.
- Комбинировать несколько условий для фильтрации.
- Сохранять порядок строк, исключая только ненужные.
Для чувствительности к регистру рекомендуется применять line.lower() и ключевое слово в нижнем регистре, чтобы удалить строки независимо от вариаций регистра.
Удаление строки с помощью временного файла

Удаление строки через временный файл подходит для больших файлов, когда загрузка всего содержимого в память нежелательна. Строки, которые нужно сохранить, записываются сразу в новый файл, после чего исходный файл заменяется.
Пошаговый алгоритм:
- Открыть исходный файл на чтение.
- Создать временный файл на запись.
- Построчно читать исходный файл и проверять условие для удаления.
- Если строка не соответствует условию удаления, записать её во временный файл.
- Закрыть оба файла и заменить исходный временным.
Пример удаления всех строк с словом «удалить» из файла data.txt:
import os
keyword = 'удалить'
with open('data.txt', 'r', encoding='utf-8') as infile, \
open('data_temp.txt', 'w', encoding='utf-8') as outfile:
for line in infile:
if keyword not in line:
outfile.write(line)
os.replace('data_temp.txt', 'data.txt')
Метод безопасен для любых размеров файлов, сохраняет структуру и порядок данных, исключая только строки, соответствующие условию удаления.
Вопрос-ответ:
Как удалить конкретную строку по её номеру в Python?
Для удаления строки по номеру сначала откройте файл на чтение и сохраните все строки в список с помощью readlines(). Затем удалите элемент списка по индексу и перезапишите файл методом writelines(). Пример: del lines[2] удаляет третью строку.
Можно ли удалить строки, содержащие определённое слово?
Да. Откройте файл на чтение, сохраните строки в список и используйте фильтрацию: filtered = [line for line in lines if ‘слово’ not in line]. После этого откройте файл на запись и запишите оставшиеся строки.
Как удалить пустые строки из файла без потери остальных данных?
Чтение файла через readlines() позволяет получить все строки. Затем используйте списковое включение с проверкой line.strip() для исключения пустых строк. После фильтрации запишите список обратно в файл с помощью writelines().
Почему стоит использовать временный файл для удаления строк в больших файлах?
При работе с большими файлами загрузка всех строк в память может вызвать ошибки. Временный файл позволяет построчно читать исходный файл, сразу записывать нужные строки в новый файл и затем заменять старый файл, что снижает нагрузку на память и сохраняет данные.
Можно ли удалять строки при одновременном чтении файла построчно?
Да, это особенно удобно для больших файлов. Откройте исходный файл на чтение и временный файл на запись, проверяйте каждую строку по условию и записывайте только подходящие строки. После завершения обработки замените исходный файл временным.
Как удалить строку из файла Python без загрузки всего файла в память?
Для больших файлов можно использовать построчное чтение с записью в временный файл. Откройте исходный файл на чтение и временный на запись, проходите по каждой строке и записывайте только те, которые нужно сохранить. После завершения замените исходный файл временным с помощью os.replace(). Такой метод позволяет удалять строки без риска переполнения памяти и сохраняет порядок оставшихся данных.
