Python – How to Replace String in File?
To replace a string in File using Python, follow these steps:
- Open input file in read mode and handle it in text mode.
- Open output file in write mode and handle it in text mode.
- For each line read from input file, replace the string and write to output file.
- Close both input and output files.
Examples
1. Replace a string in File
Consider that we have a text file with some spelling mistakes. And we have found that the string python is mis-spelled as pyton in the file.
In the following example, we will replace the string pyton with python in data.txt file, and write the result to out.txt .
Python Program
What have we done here?
- Open data.txt in read text rt mode and get the reference to fin .
- Open out.txt in write text wt mode and get the reference to fout .
- for line in fin :for each line in fin i.e., data.txt , line.replace() : replaces string pyton with python and fout.write : writes to out.txt .
- fin.close() : closes the file referenced by fin , fout.close() : closes the file referenced by fout .
Input File
Output File
The string pyton in the file is replaced with the string python .
2. Replace string and update the original file
In the following example, we will replace the string pyton with python in data.txt file, and overwrite the data.txt file with the replaced text.
Python Prgoram
What have we done here?
- Open file data.txt in read text mode rt .
- fin.read() reads whole text in data.txt to the variable data .
- data.replace() replaces all the occurrences of pyton with python in the whole text.
- fin.close() closes the input file data.txt .
- In the last three lines, we are opening data.txt in write text wt mode and writing the data to data.txt in replace mode. Finally closing the file data.txt .
Input File
The same input file after program execution.
Summary
In this tutorial of Python Examples, we learned to replace a string with other in file, with help of well detailed examples.
Как заменить строку в файле python
In this article, we will learn how we can replace text in a file using python.
Method 1: Searching and replacing text without using any external module
Let see how we can search and replace text in a text file. First, we create a text file in which we want to search and replace text. Let this file be SampleFile.txt with the following contents:
To replace text in a file we are going to open the file in read-only using the open() function. Then we will t=read and replace the content in the text file using the read() and replace() functions.
- file : Location of the file
- mode : Mode in which you want toopen the file.
Then we will open the same file in write mode to write the replaced content.
Python3
Output:
Method 2: Searching and replacing text using the pathlib2 module
Let see how we can search and replace text using the pathlib2 module. First, we create a Text file in which we want to search and replace text. Let this file be SampleFile.txt with the following contents:
Install pathlib2 module using the below command:
This module offers classes representing filesystem paths with semantics appropriate for different operating systems. To replace the text using pathlib2 module we will use the Path method of pathlib2 module.
- file: Location of the file you want to open
In the below code we are replacing “dummy” with “replaced” in our text file. using the pathlib2 module.
Как заменить строчку в .txt файле через python 3?
В файле есть определенная строка, ее сначала выводит цикл на экран, всю строку, а потом нужно бы ее изменить, т.е. удалить старое и написать на ней новое, как это делается?
Замену можно сделать так:
Открыть файл на чтение можно либо так
Преимущество второго способа в том, что вам не надо закрывать файл вручную. Конструкция 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.
Замена строк в файлах c помощью регулярных выражений в Python
Доброго времени суток! Одной из наиболее частых задач при обработке текстов, является замена одной строки на другую. Эта задача достаточно, простая для любого опытного пользователя компьютера. Однако, трудности возникают тогда, когда заранее неизвестно точное значение строки/строк. В таком случае, незаменимым инструментом становятся Регулярные выражения, которые позволяют делать замену по шаблону строки.
Регулярные выражения в Python доступны посредством модуля re. Этот модуль содержит все необходимые функции для работы с шаблонными строками. Поэтому, далее я покажу вам пример кода, как с помощью python, можно заменить одно значение на другое в файле. Данная операция может значительно уменьшить количество рутинных действий, по обработке большого количества файлов.
Скрипт далее читает список тестовых файлов в папке, заменяет в каждом файле некоторое значение и сохраняет изменения:
script.py
# -*- coding: utf-8 -*-
import re
import os
import time
# папка с исходными файлами
DIR = 'files'
# расширение исходных файлов
EXT = '.txt'
# регулярное выражение для замены
REGEX_B = r'<b>(.*?)</b>'
# итерация по файлам в папке
for file in os.listdir(DIR):
content = ''
# если это текстовый файл
if file.endswith(EXT):
# получаем полный путь к файлу с учетом директорий
file_path = os.path.join(DIR, file)
# открываем файл на чтение
fin = open(file_path, 'r', encoding = 'utf-8')
# получаем имя файла без расширения из полного пути
fout_name = os.path.splitext(os.path.basename(file_path))[0]
# открываем файл на запись
fout = open('files/%s_%d.txt' % (fout_name, int(time.time())), 'w', encoding = 'utf-8')
# читаем содержимое исходного файла
content = fin.read()
# print(content)
# регулярным выражением заменяем содержимое тега b на новое значение
content = re.sub(REGEX_B, '<b>myrusakov</b>', content)
# записываем значение
fout.write(content)
print(content)
# обязательно(!) закрываем файлы, освобождая ресурсы ОС
fin.close()
fout.close()
# вызываем функцию
replace_string_file()
Рядом со скриптом создаем папку files, и для тестирования помещаем в нее следующие файлы.
файл file1.txt
файл file2.txt
файл file3.txt
файл file4.txt
запускаем скрипт
Таким образом, после выполнения скрипта в папке files создадутся файлы с измененным содержимым. Причем исходные файлы не перезаписываются. Следуя описанным в статье рекомендациям можно в дальнейшем заменить любое сложное значение/значения в большом количестве файлов.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.