How to modify a text file?
I’m using Python, and would like to insert a string into a text file without deleting or copying the file. How can I do that?
![]()
8 Answers 8
Unfortunately there is no way to insert into the middle of a file without re-writing it. As previous posters have indicated, you can append to a file or overwrite part of it using seek but if you want to add stuff at the beginning or the middle, you’ll have to rewrite it.
This is an operating system thing, not a Python thing. It is the same in all languages.
What I usually do is read from the file, make the modifications and write it out to a new file called myfile.txt.tmp or something like that. This is better than reading the whole file into memory because the file may be too large for that. Once the temporary file is completed, I rename it the same as the original file.
This is a good, safe way to do it because if the file write crashes or aborts for any reason, you still have your untouched original file.
Запись в файл Python. Перезапись файла Python
Высокоуровневый язык Python 3 имеет множество полезных средств, позволяющих взаимодействовать с текстовыми файлами. Вы можете как создавать документы для хранения информации, так и выполнять чтение, запись и удаление данных. Сегодня поговорим о создании и записи файлов.
Создание файла, его открытие и закрытие
Работа с текстовым файлом в Python начинается с момента вызова функции open. Она принимает в качестве атрибутов путь к объекту на ПК и режим обработки. Вы можете указать абсолютный путь (это адрес размещения на жёстком диске) или относительный (речь идёт о координатах относительно папки проекта).
Что касается режима обработки файла, то при его выборе учитывайте его назначение («r» — для чтения, «w» — для записи). Таблица ниже позволит вам ознакомиться с режимами доступа к файлу в Python:

А вот пример простейшего взаимодействия с текстовым документом:
Здесь функция open принимает относительный путь, открывая его для записи. При этом, если в папке файл otus.txt будет отсутствовать, метод open создает его автоматически, после чего откроет для него нужный режим обработки.
Метод close закрывает файл, а это необходимо сделать, выполнив нужные вам действия с переменной file (иначе потеряете информацию). Впрочем, можно обойтись и без close, используя связку операторов with as (переменная, которая ссылается на файл, должна быть прописана после конструкции):
Метод write() для записи в файл в Python
В предыдущих примерах мы уже использовали метод write() . Он позволяет записывать любую строку в открытый файл. Помните, что строки в Python способны содержать не только текст, но и двоичные данные.
Запись в файл построчно выполняется посредством записи нужной вам строки с последующей записью \n — символа перевода строки.
Давайте ещё раз посмотрим на запись в файл с помощью метода write(). Синтаксис:
Код, представленный выше, создаст файл otus.txt , записав в него указанную строку.
Давайте теперь выполним запись списка поэлементно, где каждый элемент списка будет записан в новой строке:
Как изменить txt файл через python
Этот выпуск – о работе с файлами в Python. Научимся открывать, создавать и изменять файлы с текстовой и табличной информацией. Тетрадка Jupyter Notebook этого урока доступна на нашем GitHub.
Открываем файл и читаем из него данные
Самый простой формат, в котором могут храниться текстовые данные, – txt. Для примера я создала на компьютере файл с текстом Конституции, в которую для тренировки мы внесем собственные поправки, как это сделал президент России в 2020 году. Прежде, чем работать с файлом, надо его открыть. Это делается с помощью встроенной функции open. В скобках мы сперва прописываем путь к файлу, а затем режим, в котором хотим открыть файл – в данном случае мы открываем файл для чтения, за это отвечает режим «r» (от слова read).
Открыли файл, теперь надо прочитать информацию из него. Для этого есть несколько способов. Самый простой – это вывести всю информацию из файла целиком. За это отвечает операция read.
В полученном тексте отобразились и служебные символы – например, переносы строк. Чтобы увидеть текст без этих символов, присвоим содержимое файла имени data и распечатаем его.
Распечатать информацию построчно можно с помощью цикла и без использования read.
После того, как мы закончили операции с файлом, необходимо его закрыть. Закрывать файлы после работы важно, чтобы не тратить ресурсы памяти и чтобы данные из файла не потерялись. Делается это с помощью операции close. После этого операции с файлом выполняться не будут, вместо этого мы увидим ошибку.
Чтобы не прописывать операцию закрытия файла каждый раз, вместо этого можно использовать специальную конструкцию with as, тогда файл будет закрыт автоматически.
Вернемся к операции read. Если мы узнаем тип полученных данных, окажется, что это строка, в которую помещен весь текст из файла. Но есть и другие режимы чтения. Операция readline выводит на экран по одной строке из файла. Сперва это будет первая строка, а если ниже мы повторим эту операцию, то вторая и так далее.
Чтобы получить список из строк, используют операцию readlines.
Внутри всех этих операций можно указывать количество символов, которые мы хотим прочитать из файла. Например, read(11) прочитает первые 11 символов.
Создаем файл и записываем в него данные
Для того, чтобы создать файл, доступный для внесения данных, мы прописываем ту же операцию открытия, но с режимом «w» (от слова write). Если файл с таким именем, которое мы указали, отсутствует на компьютере, то он создается. Если подобный файл уже есть, то он перезаписывается, и соответственно старые данные в нем стираются. Поэтому важно указать файлу имя, которое еще не используется. Чтобы поместить данные в файл, надо использовать операцию write. Давайте запишем туда текст из предыдущего файла, который хранится у нас под именем data.
Еще один режим, который можно указать – «a» (от слова append) – это открытие на добавление данных. В таком случае данные добавятся в конец существующего файла. Давайте добавим в текст Конституции еще одну статью.
С помощью операции write мы записали в файл информацию из строки. Чтобы записать информацию из какой-либо последовательности, например, списка, используют writelines. Давайте запишем в Конституцию еще несколько статей.
Если мы снова прочитаем файл, мы увидим, что строки из списка записываются без разделителей. Чтобы они появились, нам надо записать их самостоятельно. Сделать это можно, прибавив к каждому элементу списка символ, который в Python означает перенос строки.
Работаем с csv-файлами
Открытые данные, с которыми работают журналисты, часто представлены в формате csv – от слов comma separated values, то есть значения, разделенные запятыми. Это текстовый формат для представления табличных данных. Для примера зайдем на сайт Минобрнауки и скачаем данные о численности студентов по направлениям подготовки. Для упрощенной работы с файлами csv в Питоне есть специальный встроенный модуль csv. Давайте импортируем его.
Для чтения используется функция reader. Откроем файл, создадим объект reader и попросим распечатать содержимое файла построчно.
Мы получим ошибку, которая сигнализирует нам о том, что у данных из файла, который мы пытаемся открыть, какая-то нестандартная кодировка – такая проблема встречается довольно часто. Чтобы открыть такой файл, надо прописать кодировку в параметре encoding – узнать ее можно с помощью специального модуля chardet.
Из результата мы копируем полученную кодировку и вставляем ее в код в параметре encoding.
Но мы все равно получили не то, что нам нужно. Оказалось, что в этом файле значения разделены не запятыми, а точкой с запятой. Чтобы правильно прочитать этот файл, мы можем указать разделитель в параметре delimiter.
Этот код выдаст нам списки со значениями из ячеек каждой строки таблицы. Но удобнее извлекать данные из csv-файла не в списки, а в словарь. Делается это с помощью операции DictWriter.
C помощью операции fieldnames мы сможем узнать названия столбцов в наших данных.
С помощью циклов в словарях удобнее искать нужное нам значение. Например, давайте узнаем, сколько студентов в 2019 году изучали военную журналистику.
Давайте создадим собственный файл csv и перезапишем в него те же данные про студентов, но уже в стандартной кодировке и со значениями, разделенными запятыми. В качестве заголовков столбцов укажем список, извлеченный из старого файла. Пропишем заголовки с помощью writeheader.
И наконец, записываем старые данные из словаря в новый файл с помощью writerows.
Замена строк в файлах 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 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.