Как заменить строки в файле с помощью счетчика циклов

У меня есть файл с именем: my_file.txt

И внутри этого my_file.txt у меня есть несколько строк, таких как:

name1 name1 name1 name1 name1 name1 name1 name1 name1 name1

И мне нужно сделать счетчик массового цикла для этого от 1 до 10, чтобы он выглядел так:

name1 name2 name3 name4 name5 name6 name7 name8 name9 name10

Пока у меня есть только это, которое я нашел здесь:

https://www.geeksforgeeks.org/how-to-search-and-replace-text-in-a-file-in-python

Но это просто меняет одну строку на другую. И мне нужно использовать счетчик.

search_text = "dummy"

replace_text = "replaced"

with open(r'my_file.txt', 'r') as file:

    data = file.read()
    data = data.replace(search_text, replace_text)

with open(r'my_file.txt', 'w') as file:

    file.write(data)

print("Text replaced")

В вашем my_file.txt есть только одна строка?

ElapsedSoul 23.03.2022 07:08

Это строки одна под другой, но я использовал это только как пример для упрощения.

ruby_admirer 23.03.2022 07:49

Таким образом, ваш счетчик должен находиться над строками или только в одной строке. И гораздо приятнее, чтобы ваши демо-данные и демо-код не противопоставлялись друг другу. демонстрационные данные используют name, но dummy и replaced в коде — плохой пример.

ElapsedSoul 23.03.2022 07:54

Ваш упрощенный пример охватывает то, что вам нужно рассказать. имя1 имя1 имя1\nимя2 имя2 имя2 по имя11 имя12 имя23\nимя21 имя22 имя23. и так далее. Слишком много случаев.

ElapsedSoul 23.03.2022 07:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
36
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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


with open(r'my_file.txt', 'r') as file:
    data = file.read()
    
search_text = "dummy"
replace_text = "replaced"
n_replaced = 0
index = 0


chunks = []
while True:
    index = data.find(search_text)
    if index == -1:
        break
    replace_text_counter = f"{replace_text}{n_replaced}"
    chunks.append(data[:index])
    data = data[index:].replace(search_text, replace_text_counter, 1)
    n_replaced += 1
chunks.append(data)

with open(r'my_file.txt', 'w') as file:
    file.write("".join(chunks))

print("Text replaced")

Где бы вы ни были на планете, пусть моя искренняя благодарность достигнет вас. Я праздновал с радостью, так как я искал решение, подобное вашему, в течение нескольких дней самостоятельно. Спасибо большое, желаю тебе успехов на свете друг! Обнимаю!

ruby_admirer 23.03.2022 08:07

Я рад, что смог помочь тебе, мой друг, всего тебе наилучшего.

Al Wld 24.03.2022 12:45

Игнорировать чтение и запись файла и строк в вашем случае. Я даю код только для строковой строки, которую вы дали name1 name1 name1 name1 name1 name1 name1 name1 name1 name1:

string = "name1 name1 name1 name1 name1 name1 name1 name1 name1 name1"
li = string.split()
i=0
for i<len(li):
  li[i]=li[i].replace("1",i+1)
return ' '.join(li)

Другие вопросы по теме