Как заменить строку в файле python
Перейти к содержимому

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

  • автор:

Замена строки по номеру в файле на Python

Есть файл в нем 100 строк и они не будет меняться, кроме одной, а также их положение не будет меняться, т.е номера остаются прежними. Мне нужно на Python заменить 20 строку целиком на другою строку полностью. так чтобы ее номер не поменялся. Как это можно сделать?

knigolaz
20.08.19 14:07:16 MSK

Важно — содержимое строки заранее не известно,т.е нужно найти ее по номеру и заменить.

knigolaz
( 20.08.19 14:10:24 MSK ) автор топика
Ответ на: комментарий от knigolaz 20.08.19 14:10:24 MSK

Читать построчно и писать в новый файл. Дошёл до нужной строки, сдела что надо, продолжил читать и писать.

А если, всего 100 строк, то можно считать в список, поменять нужную строку и переписать файл.

vvn_black ★★★★★
( 20.08.19 14:26:07 MSK )
Последнее исправление: vvn_black 20.08.19 14:30:10 MSK (всего исправлений: 1)

Второй вариант, вызвать sed из питона.

vvn_black ★★★★★
( 20.08.19 14:26:47 MSK )
Ответ на: комментарий от vvn_black 20.08.19 14:26:47 MSK

Самое интересное, что вызывать некоторые утилиты из питона иногда выходит дешевле, чем нативными методами обрабатывать

ZERG ★★★★★
( 20.08.19 16:17:21 MSK )

Как это к тематике форума относится? Иди на питонофорумы и там спрашивай.

anonymous
( 20.08.19 16:39:59 MSK )

if __name__ == "__main__": with open('test.txt', 'r+') as fd: lines = fd.readlines() fd.seek(0) fd.writelines(lines[:19] + ['blah'] + lines[20:]) 

Novel ★★★★
( 20.08.19 16:45:38 MSK )

Извините, может вам всё же прочитать какое-нибудь руководство для новичков по Python?

te111011010
( 20.08.19 16:49:15 MSK )
Ответ на: комментарий от ZERG 20.08.19 16:17:21 MSK

Дешевле — быстрее ? Или что ты имеешь ввиду?

Запись данных в файл

21 августа 2013 г. Archy Python для начинающих » Общие вопросы 7

Запись данных в файл Python

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

Чтобы не соскучится, мы покажем несколько способов внесения данных в файл и наглядно увидим результат. Чтобы открыть файл для записи или же создать его, мы воспользуемся функцией open(filename, mod) и в качестве второго параметрам mod укажем значение w т.е. (write) запись. Если файл с указанным названием filename не существует — он будет создан.

Создаем новый файл в Python

# -*- coding: utf-8 -*- my_file = open('snake.txt', 'w') # Закрываем файл my_file.close() 

После выполнения данного скрипта, по указанному нами пути будет создан новый файл snake.txt если файл не был создан то нужно проверить права доступа на папку. Стоит учесть, что если файл snake.txt существовал ранее, то после открытия его функцией open() и мод W, тогда содержимое файла удаляется. Если вы хотите добавить что-то в конце, то следует использовать мод ‘a+’.

Запись данных в файл Python

Предположим, что мы создали новый файл и хотим в него внести некий текст, для этого воспользуемся методом write().

# -*- coding: utf-8 -*- my_file = open('snake.txt', 'w') text_for_file = 'Some text here. ' my_file.write(text_for_file) my_file.close() 

Замена строк в файлах c помощью регулярных выражений в Python

Доброго времени суток! Одной из наиболее частых задач при обработке текстов, является замена одной строки на другую. Эта задача достаточно, простая для любого опытного пользователя компьютера. Однако, трудности возникают тогда, когда заранее неизвестно точное значение строки/строк. В таком случае, незаменимым инструментом становятся Регулярные выражения, которые позволяют делать замену по шаблону строки.

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

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

script.py

# -*- coding: utf-8 -*-
import re
import os
import time

# папка с исходными файлами
DIR = ‘files’
# расширение исходных файлов
EXT = ‘.txt’
# регулярное выражение для замены
REGEX_B = r’(.*?)

# итерация по файлам в папке
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, ‘myrusakov‘, content)

# записываем значение
fout.write(content)
print(content)

# обязательно(!) закрываем файлы, освобождая ресурсы ОС
fin.close()
fout.close()

# вызываем функцию
replace_string_file()

Рядом со скриптом создаем папку files, и для тестирования помещаем в нее следующие файлы.

файл file1.txt

Здравствуйте! меня зовут Иван.

файл file2.txt

Здравствуйте! меня зовут Ник.

файл file3.txt

Здравствуйте! меня зовут Петр.

файл file4.txt

Здравствуйте! меня зовут Федя.

запускаем скрипт

C:/> python script.py

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

Создано 26.01.2021 13:14:10

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

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

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.

    Замена текста в файле. Функция replace() в Python не работает для файла?

    Сколько читаю различных ответов, но так и не могу понять. Вроде должно работать.
    В текстовом файле имеются уникальные «переменные» (текстовые строки) типа «abb1» , «abb2», «abb3».
    Встречаются только по 1 разу каждая. Файл относительно небольшой — 2 Мб/4000 строк.
    Должен ли я обязательно читать файл построчно? Из различных статей и ответов — не должен. Можно прочитать целиком и использовать функцию replace() сразу для всего файла. Тем более, у неё есть параметр количества замен.
    Но на практике не заменят ничего.

    abb = "abb1" result = "1234" with open("f1.svg", 'r') as f1, open("f2.svg", 'w') as f2: f1read= f1.read() f1read = f1read.replace(abb, result) f2.write(f1read)
    • Вопрос задан более двух лет назад
    • 484 просмотра

    9 комментариев

    Простой 9 комментариев

    fox_12

    Владимир Куц @fox_12 Куратор тега Python
    У вас какая-то ерунда со скобками. Поправьте.

    with open("f1.svg"), 'r') as f1, open("f2.svg"), 'w') as f

    nik19 @nik19 Автор вопроса

    Владимир Куц, Спасибо, но проблема не в них. Программа исполняется без ошибок, а замена не происходит.

    danila763

    Ну может файлы svg, векторная графика, имея другую кодировку открываются в другом виде, попробуй вывести результат в консоль (print(f1.read())

    nik19 @nik19 Автор вопроса
    Выводит весь файл. Файл SVG обычный текстовый. Вот строка из файла, где нужна замена:

    abb1

    Vindicar

    Уточнения ради:
    1. если вывести print(type(f1read)), выведет ?
    2. В файле точно содержится искомое значение?
    3. Искомое значение — латиница и цифры? Оно на одной строке?

    nik19 @nik19 Автор вопроса

    1. Да,
    2. Да, причем не окруженное пробелами, т.е. . fnt4″>abb1
    Функция же просто символы заменяет, не слова? Т.е. не должно быть пробел abb1 пробел.
    И даже в строке fghfgfabb1hkh должен найти «abb1» и заменить на нужное «1234»?
    3. Да, вот больший кусок проблемного кода и часть файла SVG для примера:

    for d in range(1, 31 + 1): # d - номер дня cur.execute("""SELECT bm1, bm2, ab1, ab2, rk1, rk2, gk1, gk2, ym1, ym2 FROM days2 WHERE year=? AND month=? AND day=?;""", (yr, m, d) ) result = cur.fetchone() # Замена bmb = "bmb" + str(d) bme = "bme" + str(d) abb = "abb" + str(d) abe = "abe" + str(d) rkb = "rkb" + str(d) rke = "rke" + str(d) gkb = "gkb" + str(d) gke = "gke" + str(d) ymb = "ymb" + str(d) yme = "yme" + str(d) with open((path1 + svg1[m] + ".svg"), 'r') as f1, open((path1 + svg1[m] + "out.svg"), 'w') as f2: #print(f1.read()) f1read= f1.read() #print(type(f1read)) f1read = f1read.replace(bmb, result[0]) f1read = f1read.replace(bme, result[1]) f1read = f1read.replace(abb, result[2]) f1read = f1read.replace(abe, result[3]) f1read = f1read.replace(rkb, result[4]) f1read = f1read.replace(rke, result[5]) f1read = f1read.replace(gkb, result[6]) f1read = f1read.replace(gke, result[7]) f1read = f1read.replace(ymb, result[8]) f1read = f1read.replace(yme, result[9]) f2.write(f1read)

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *