Python, замена строк в html файле на другие

У меня есть строка html с галереей:

<div class = "col-lg-4 col-md-6 portfolio-item ">
        <div class = "portfolio-wrap">
          <img src = "img/portfolio/1.jpg" class = "img-fluid" alt = "">
          <div class = "portfolio-info">
            <h4><a href = "#">TITLE</a></h4>
            <p>DESCRIPTION</p>
            <div>
              <a href = "img/portfolio/1.jpg" data-lightbox = "portfolio" data-title = "DESCRIPTION" class = "link-preview" title = "Preview"><i class = "ion ion-eye"></i></a>
            </div>
          </div>
        </div>
      </div>

Мне нужно добавить еще 100 фотографий в галерею с именами от 1.jpg до 101.jpg, и я не хочу копировать их одну за другой, а скорее использую python, чтобы сделать это за меня. У меня есть что-то вроде этого:

fin = open("gallery.html", "rt")
fout = open("gallery2.html", "wt")
for line in fin:
fout.write(line.replace('1.jpg', '2.jpg'))
fin.close()
fout.close()

Но мне нужно знать, как сказать Python скопировать наши строки 101 раз и последовательно переписать все числа - от 1 до 101?

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
349
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете сделать что-то вроде этого (я предполагаю, что вы хотите добавить несколько элементов HTML с разными ссылками).

Используйте форматирование, например, используйте код формата 0 и замените каждый его в них на каждое значение в каждой итерации от 0 до 101 включительно.

template = """
<div class = "col-lg-4 col-md-6 portfolio-item ">
        <div class = "portfolio-wrap">
          <img src = "img/portfolio/{0}.jpg" class = "img-fluid" alt = "">
          <div class = "portfolio-info">
            <h4><a href = "#">TITLE</a></h4>
            <p>DESCRIPTION</p>
            <div>
              <a href = "img/portfolio/{0}.jpg" data-lightbox = "portfolio" data-title = "DESCRIPTION" class = "link-preview" title = "Preview"><i class = "ion ion-eye"></i></a>
            </div>
          </div>
        </div>
      </div>
"""

html = ""
maximum = 101

# stop at 102

for i in range(maximum+1): 
    html += template.format(i)
print(html)

# now write this output to your file if you want

with open("gallery2.html", "w") as f:
    f.write(html)

Примечание: поскольку вы печатаете слишком много, код Visual Studio (или, по крайней мере, по умолчанию в терминале) будет выводить строку только до 25. Используйте какую-либо другую среду IDE или что-то еще, чтобы получить полный вывод.

спасибо, это то, что я искал!

matsi 13.12.2020 13:22
Ответ принят как подходящий

Вы можете использовать цикл for и создавать новую строку в каждом цикле со следующим целым числом:

for i in range(101):
    n = i+1
    for line in fin:
        fout.write(line.replace('1.jpg',f'{n}.jpg'))

Синтаксис f'{n}.jpg' — очень удобный способ включения переменных в строку. Я не уверен, как разобрать его в ваш новый html-файл, чтобы сохранить его правильно. Можно даже поместить выражения в скобки отформатированной строки, что приведет к еще более чистому коду:

for i in range(101):

    for line in fin:
        fout.write(line.replace('1.jpg',f'{i+1}.jpg'))

Для получения дополнительной информации о форматировании строк проверьте эту ссылку о форматировании f-строк.

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