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。
我有 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。