Замена строк в файлах 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>'
def replace_string_file():
# итерация по файлам в папке
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
Здравствуйте! меня зовут <b>Иван</b>.
файл file2.txt
Здравствуйте! меня зовут <b>Ник</b>.
файл file3.txt
Здравствуйте! меня зовут <b>Петр</b>.
файл file4.txt
Здравствуйте! меня зовут <b>Федя</b>.
запускаем скрипт
C:/> python script.py
Таким образом, после выполнения скрипта в папке files создадутся файлы с измененным содержимым. Причем исходные файлы не перезаписываются. Следуя описанным в статье рекомендациям можно в дальнейшем заменить любое сложное значение/значения в большом количестве файлов.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.