如何使用for循环(在函数中)替换字符串中的子字符串的多个实例?

时间:2017-10-20 12:16:05

标签: python html function for-loop

我正在尝试使用python编写一个文本文件Web文档(第一年学生学习python的基本概念)

说我有这样的HTML模板:

html_template = """<!DOCTYPEhtml>
<html>
<head>
    <title>News Archive</title>
</head>

<body> 
  <br>
  <ol>

  <!--  Article 1 -->

  <h1>***TITLE***</h1>


  <img src=***IMGURL***  
  <p>***DESCRIPTION***</p>
  <p><strong> Full story: </strong> ***LINK*** </p>
  <p><strong> Dateline: </strong> ***PUBDATE*** </p>
  <br/>
  <!--  Article 2 -->  
  <h1>***TITLE***</h1>
  <img src=***IMGURL***   

  <p>***DESCRIPTION***</p>

  <p><strong> Full story: </strong> ***LINK*** </p>
  <p><strong> Dateline: </strong> ***PUBDATE*** </p>

</body>
</html>
"""

假设我想按顺序用列表中的字符串替换***TITLE***的所有实例。这是包含字符串的列表:

titles = ['HI', 'HELLO']

要将***TITLE***的第一个实例替换为'HI',将***TITLE***的第二个实例替换为'HELLO',我会这样做:

for t in titles:
    html_template = html_template.replace('***TITLE***', t, 1)

但是如果我想创建一个for循环(在一个函数中),例如,***TITLE***替换为包含10个字符串的相应列表***IMGURL***,其中包含10个字符串的相应列表, ***DESCRIPTION***包含10个字符串的相应列表,以及其他占位符及其各自的10个字符串列表等等?

我已经尝试了下面的功能但是IDLE环境说它不起作用:语法错误和解析时的Python意外EOF。它出错的地方是:
1. extract_file(file) - 当我尝试在shell窗口中通过yo = generate_html('file.html')(file.html是文件名)测试它并打印出来时,shell窗口返回None
2. for i in image_url: - 在阅读:

时说出语法错误

功能:

def html_extract(file):
     extract_file(file) (calls the respective lists for respective placeholder)    
    for t in titles:
        html_code = html_template.replace('***TITLE***', t, 1)
    for i in image_url:
         html_code = html_code.replace('***IMGURL***', i, 1)
    for d in descriptions:
         html_code = html_code.replace('***DESCRIPTION***', d, 1)
    for l in links:
         html_code = html_code.replace'***LINK***', l, 1)
    for p in pubdates:
         html_code = html_code.replace('***PUBDATE***', p, 1)       

2 个答案:

答案 0 :(得分:0)

replace()的第4次通话中缺少括号。此外,作为函数的结果,最好返回本地html_code

此外,如果函数内的第一行应该是docstring,你应该在一对""" """中使它成为一个字符串文字,并给它与其余部分相同的缩进代码。

答案 1 :(得分:0)

可以(并不代表你 )使用zip

titles = ['HI', 'HELLO']
urls = ['url1', 'url2']
descriptions = ['desc1', 'desc2']
links = ['link1', 'link2']
dates = ['date1', 'date2']

for title, url, description, link, date in zip(titles, urls, descriptions, links, dates):
    html_template = html_template.replace('***TITLE***', title, 1)
    html_template = html_template.replace('***IMGURL***', url, 1)
    html_template = html_template.replace('***DESCRIPTION***', description, 1)
    html_template = html_template.replace('***LINK***', link, 1)
    html_template = html_template.replace('***PUBDATE***', date, 1)

print(html_template)
"""<!DOCTYPEhtml>
   <html>
       <head>
           <title>News Archive</title>
       </head>

       <body> 
           <br>
           <ol>

           <!--  Article 1 -->

           <h1>HI</h1>

           <img src=url1>  
           <p>desc1</p>
           <p><strong> Full story: </strong> link1 </p>
           <p><strong> Dateline: </strong> date1 </p>
           <br/>

           <!--  Article 2 -->  
           <h1>HELLO</h1>
           <img src=url2>

           <p>desc2</p>

           <p><strong> Full story: </strong> link2 </p>
           <p><strong> Dateline: </strong> date2 </p>

      </body>
  </html>


您应该做的是使用正确的HTML模板引擎(no, I'm not even going to suggest regex)。