Как перезаписать строку в файле python

Обновлено: 04.07.2024

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

Работа с файлами

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

  1. Открыть файл.
  2. Принять ввод из этого файла и записать вывод в этот файл.
  3. Закрыть файл.

Мы также узнаем некоторые полезные операции, такие как копирование файла и удаление файла.

Зачем нужны файловые операции в Python?

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

Итак, давайте рассмотрим здесь некоторые файловые операции Python.

1. Открытие файла с помощью функции open()

Первый шаг к работе с файлами в Python – научиться открывать файл. Вы можете открывать файлы с помощью метода open().

Функция open() в Python принимает два аргумента. Первый – это имя файла с полным путем, а второй – режим открытия файла.

Ниже перечислены некоторые из распространенных режимов чтения файлов:

Кроме того, для операционной системы Windows вы можете добавить «b» для доступа к файлу в двоичном формате. Это связано с тем, что Windows различает двоичный текстовый файл и обычный текстовый файл.

Предположим, мы помещаем текстовый файл с именем file.txt в тот же каталог, где находится наш код. Теперь мы хотим открыть этот файл.

Однако функция open (filename, mode) возвращает файловый объект. С этим файловым объектом вы можете продолжить свою дальнейшую работу.

Открытие файла в python

Результатом следующего кода будет:

2. Чтение и запись файлов

Python предлагает различные методы для чтения и записи файлов, где каждая функция ведет себя по-разному. Следует отметить один важный момент – режим работы с файлами. Чтобы прочитать файл, вам нужно открыть файл в режиме чтения или записи. В то время, как для записи в файл на Python вам нужно, чтобы файл был открыт в режиме записи.

Вот некоторые функции Python, которые позволяют читать и записывать файлы:

  • read() – эта функция читает весь файл и возвращает строку;
  • readline() – эта функция считывает строки из этого файла и возвращает их в виде строки. Он выбирает строку n, если она вызывается n-й раз.
  • readlines() – эта функция возвращает список, в котором каждый элемент представляет собой одну строку этого файла.
  • readlines() – эта функция возвращает список, в котором каждый элемент представляет собой одну строку этого файла.
  • write() – эта функция записывает фиксированную последовательность символов в файл.
  • Writelines() – эта функция записывает список строк.
  • append() – эта функция добавляет строку в файл вместо перезаписи файла.

Возьмем пример файла «abc.txt» и прочитаем отдельные строки из файла с помощью цикла for:

Чтение файла в Python

Теперь, когда мы знаем, как читать файл в Python, давайте продвинемся вперед и выполним здесь операцию записи с помощью функции Writelines().

Файл записи

3. Копирование файлов с помощью метода shutil()

Мы можем использовать модуль shutil для копирования файлов в Python. Эта утилита позволяет нам выполнять операции копирования и перемещения для разных файлов. Давайте поработаем над этим на примере:

4. Удаление файлов с помощью метода shutil.os.remove()

Модуль Python shutil предлагает метод remove() для удаления файлов из файловой системы. Давайте посмотрим, как мы можем выполнить операцию удаления в Python:

5. Закрытие открытого файла с помощью метода close()

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

Синтаксис для закрытия открытого файла в Python:

Если мы продолжим наши предыдущие примеры, где мы читаем файлы, вот как вы закроете файл:

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

6. Ошибка FileNotFoundError

Ошибка FileNotFoundError часто возникает при работе с файлами в Python. Этого можно легко избежать, указав полные пути к файлам при создании файлового объекта.

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

50.1k 9 9 золотых знаков 96 96 серебряных знаков 288 288 бронзовых знаков 91 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака похожие подходы можно использовать как в вопросе: Каким образом удалить строчки выборочно? и How to search and replace text in a file using Python? Если вам дан исчерпывающий ответ, отметьте его как верный (галка напротив выбранного ответа).

Замену можно сделать так:

Открыть файл на чтение можно либо так

Преимущество второго способа в том, что вам не надо закрывать файл вручную. Конструкция with сделает это за вас после закрытия её блока.

Перезаписать файл можно же таким образом:

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

Грубо говоря, вы можете сделать это как-то так:

Также могут помочь функции startswith() и endswith() , если у вас есть только начало или конец от искомой строки. И помните про регистр!

Также можно не перебирать строки, а обратиться к строке по индексу, если вам известно какой у неё номер, и заменить её содержание.

И можно воспользоваться функцией replace() , как уже написал автор второго ответа, что сократит количество кода, но заменит абсолютно все вхождения. Чтобы этого избежать, при вызове функции можно указать максимальное число совершаемых замен: S.max(sub_in_str, to_change_str, max) .

Также учитывайте, что replace() совершит замену даже если строка частично совпадает. То есть выполнив это:

Мы получим Thwas was a simple example

Если длина новой строки не совпадает с длиной старой, то придётся переписать весь файл (начиная со строчки, которую вы хотите заменить) даже если вам надо заменить только одну строку в файле (за редкими исключениями). Связанный вопрос: Запись текстовой строки по нужному индексу в файл на языке Си?

Чтобы в случае ошибки сохранить оригинал или для больших файлов (когда всё содержимое в памяти не помещается), может использоваться временный файл куда новое содержимое пишется и в конце в случае успеха он переименовывается в исходное имя файла. Похожий подход использует стандартный модуль fileinput : исходный файл переименовывается (чтобы из него читать текущее содержимое), а стандартный вывод перенаправляется в указанный файл (простой print печатает прямо в файл):

Можно самостоятельно явно временный файл создать:

Отличие в том, что оригинальное содержимое хранится в .bak файле в fileinput подходе, а в коде с NamedTemporaryFile исходный файл заменяется только в случае успеха (в отсутствие исключений).

Небольшой файл можно в память целиком загрузить, чтобы получить список строк, изменить нужные и целиком перезаписать этот файл, рискуя потерять данные, если ошибка возникнет при записи (аналогично коду в @stxdtm ответе):

Подробнее представленные подходы можно по ссылкам в похожем ответе посмотреть.

Если длина новой строки совпадает с длиной старой (в байтах), то можно прямо по месту изменения делать, не переписывая другие части файла, к примеру, используя mmap модуль, который позволяет файл рассматривать и как файл ( .readline() , etc), и как байтовую строку ( .find() , можно применять регулярные выражения). Связанный вопрос: Python - How can I change bytes in a file.

Чтобы заменить строку в файле с помощью Python, выполните следующие действия:

  1. Откройте файл ввода в режиме чтения и обрабатывать его в текстовом режиме.
  2. Откройте выходной файл в режиме записи и обрабатывать его в текстовом режиме.
  3. Для каждой строки читайте из файла ввода, замените строку и напишите в выходной файл.
  4. Закрыть как входные и выходные файлы.

Пример 1: Замените строку в файл

В следующем примере мы заменим строку Pyton с Python в data.txt Файл и напишите результат к Out.txt Отказ

Что мы здесь сделали?

  1. Открыть data.txt в чтении текста RT Режим и получить ссылку на Фин Отказ
  2. Открыть Out.txt В написании текста Wt Режим и получить ссылку на подойдут Отказ
  3. Для линии в FIN : Для каждой строки в Фин I.E., data.txt , line.replace () : Заменяет строку Pyton с Python и fout.write : пишет до Out.txt Отказ
  4. FIN.CLOSE () : закрывает файл, на который ссылается Фин , fout.close () : закрывает файл, на который ссылается подойдут Отказ

Строка Python В файле заменяется строкой Python Отказ

Пример 2: Замените строку в тот же файл

В следующем примере мы заменим строку Pyton с Python в data.txt файл и перезаписать data.txt Файл с замененным текстом.

Что мы здесь сделали?

  1. Открытый файл data.txt в чтении текстового режима RT Отказ
  2. fin.read () Читает весь текст в data.txt к переменной данные Отказ
  3. data.replace () заменяет все вхождения Python с Python во всем тексте.
  4. FIN.CLOSE () закрывает входной файл data.txt Отказ
  5. В последние три строки мы открываем data.txt В написании текста Wt Режим и запись данных в data.txt в режиме замены. Наконец закрывая файл data.txt Отказ

Тот же входной файл после выполнения программы.

Резюме

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


Основы

Введение в тему

В этом уроке мы рассмотрим как заменить подстроку внутри строки, используя метод replace().

Метод replace Python возвращает копию строки, в которой все вхождения искомой подстроки заменяются другой подстрокой.

Что делает метод

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

Синтаксис

Метод .replace() имеет следующий синтаксис:

Параметры

В качестве аргументов в метод передаются:

str — Строка, к которой применяется метод (тип данных string).

old — Подстрока, которую необходимо найти и заменить (тип данных string).

new — Новая подстрока, которой будет заменена старая (тип данных string).

count— Необязательный аргумент. Количество совпадений старой подстроки, которую необходимо заменить (тип данных int). Если этот параметр не указать, то будут заменены все вхождения подстрок на новые.

Вот несколько примеров применения метода:

Возвращаемое значение

Метод возвращает копию строки, в которой старая подстрока заменяется новой подстрокой. Строка, к которой применяется метод остаётся неизменной. Если искомая подстрока не обнаружена, то возвращается копия исходной строки.

Применение replace для замены нескольких значений

С помощью данного метода возможно выполнить поиск и замену нескольких значений, например элементов коллекции:

С помощью словаря

Предыдущий пример позволяет заменить несколько элементов, однако все они имеют одно и то же значение «i». Если необходимо заменить несколько разных значений, например «i» на «I» и «a» на «A», то необходимо реализовать чуть более сложную программу с использованием словарей:

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

У этого варианта программы есть один существенный недостаток, программист не может быть уверен в том, какой результат он получит. Дело в том, что словари — это последовательности без определенного порядка, поэтому рассматриваемый пример программы может привести к двум разным результатам в зависимости от того, как интерпретатор расположит элементы словаря:

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

Для решения этой проблемы можно заменить обычный словарь на упорядоченный словарь OrderedDict, который нужно импортировать следующей командой:

Читайте также: