Python,将 html 文件中的行替换为其他行

Python, replacing lines in html file to other

我有 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,我不想一张一张地复制粘贴它们,而是 id使用 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?

你可以这样做(我假设你想要的是附加多个 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 或其他东西以获得完整的输出。

您可以使用 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 字符串的更多字符串格式信息,请查看此 link