2017-10-20 31 views
1

Je suis en train d'écrire un document Web de fichier texte en utilisant python (étudiant uni première année d'apprentissage les concepts de base de python)Comment remplacer plusieurs instances d'une sous-chaîne dans une chaîne à l'aide d'une boucle for (dans une fonction)?

que j'ai un modèle HTML comme ceci:

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> 
""" 

permet de dire que je voulez remplacer toutes les instances de ***TITLE*** par des chaînes dans une liste dans l'ordre. Voici la liste contenant des chaînes:

titles = ['HI', 'HELLO'] 

Pour remettre en place la première instance de ***TITLE*** avec 'HI' et la deuxième instance de ***TITLE*** avec 'HELLO', je ferais ceci:

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

Mais si je voulais créer une boucle for (dans une fonction) qui remplace, par exemple, ***TITLE*** avec une liste respective contenant 10 chaînes, ***IMGURL*** avec une liste respective contenant 10 chaînes, ***DESCRIPTION*** avec une liste respective contenant 10 chaînes, et ainsi de suite pour le reste des espaces réservés et leurs listes de 10 chaînes respectives?

J'ai essayé la fonction ci-dessous, mais l'environnement IDLE dit qu'il ne fonctionne pas: erreur de syntaxe et EOF Python inattendu lors de l'analyse. Les endroits où il s'est trompé sont:
1. extract_file(file) -Quand je tente de le tester dans la fenêtre shell en faisant yo = generate_html('file.html') (fichier.html est le nom du fichier) et en imprimant yo, la fenêtre shell retourne None.
2. for i in image_url: - dit erreur de syntaxe lors de la lecture sur :

La fonction:

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)  
+0

Il y a trop de parties de votre code qui manquent pour reproduire/identifier les problèmes que vous rencontrez, et peut-être trop de problèmes pour une seule question. Veuillez modifier votre message pour ajouter tout le code pertinent (et uniquement le code approprié) pour que tout le monde puisse le copier et l'exécuter et avoir exactement les mêmes problèmes que vous. –

Répondre

0

Vous pouvez (ne signifie pas que vous devriez ) utiliser 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> 


Ce que vous devez faire est d'utiliser un moteur de template HTML approprié (no, I'm not even going to suggest regex).

+0

Cela l'a fait correctement pour moi: D! La seule chose est que nous n'avons pas appris à propos de zip, donc je peux avoir à demander à mon professeur si je suis autorisé à utiliser ça :( – binav123

0

parenthèse manquante dans le 4ème appel de replace(). En outre, le html_code local devrait mieux être renvoyé à la suite de la fonction.

De plus, si la première ligne dans la fonction est censée être un docstring, vous devez en faire une chaîne littérale dans une paire de """""" et lui donner la même empreinte que le reste du code.

+0

Merci! ça a aidé: D – binav123