IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Extraction de variables dans une chaîne


Sujet :

Python

  1. #1
    Membre actif

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 239
    Points
    239
    Par défaut Extraction de variables dans une chaîne
    Salut,
    Je débute en python et je souhaite créer un système de template qui à partir des fichiers templates (des fichiers HTML avec des variables) me remplace chaque variables et retranscrit le tout dans un autre fichier...
    Ca j'arrive à le faire sans problème, j'ai vu qu'il existe une classe Template dans le module string... C'est elle qui m'aide à remplacer les variables contenue dans le fichier template...

    Mon problème, c'est que je souhaite mettre chaque variable du fichier dans un dictionnaire afin de les modifier facilement... Mais je ne trouve pas comment faire...

    Pour info une variable est définie comme ceci $ma_variable ou encore ${ma_variable}...

    Si ça peut vous servir voici jusqu'a maintenant une ébauche (pas grand chose) que j'ai faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    from string import Template
     
    class HtmlTemplate(Template):
        """A class to manipulate HTML templates."""
        def __init__(self, path):
            template = self._loadTpl(path)
            Template.__init__(self, template)
     
        def _loadTpl(self, path):
            """Load HTML template and return all its content."""
            tpl = open(path, 'r')
            tplString = tpl.read()
            tpl.close()
     
            return tplString
     
        def export(self, template, path):
            """Export the template in memory to an HTML file."""
            f = open(path, 'w')
            f.write(template)
            f.close()
    Bon j'ai bien dis que je débutais hein il y a sûrement un autre moyen de faire...

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Février 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 76
    Points : 103
    Points
    103
    Par défaut
    salut,

    Mon problème, c'est que je souhaite mettre chaque variable du fichier dans un dictionnaire afin de les modifier facilement... Mais je ne trouve pas comment faire...
    moi je ferais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tpl = HtmlTemplate("mon_template")
    mon_dico = {"var1": "hello", "var2": "whaouuuu"}
    html = tpl.substitute(mon_dico)
    Ai-je bien répondu à ton attente? Peut-être que je n'ai pas compris ton problème. (?)

    Par contre, ta méthode export() m'intrigue un peu. Elle demande comme argument un template. Mais elle devrait plutôt utiliser le template interne à la classe. Sauf si tu rends cette méthode statitique, ce qui aurait plus de sens.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class HtmlTemplate(...):
        ...
        @staticmethod
        def export(...):
            ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HtmlTemplate.export(...)

  3. #3
    Membre actif

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par naxelas
    Ai-je bien répondu à ton attente? Peut-être que je n'ai pas compris ton problème. (?)
    Un peu à côté en fait je souhaite extraire les variables à partir de la chaîne retournée lors de la lecture du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html>
      <head>
        <title>$title</title>
      <head>
      <body>
        <p>$text</p>
      </body>
    </html>
    La lecture de ce fichier par exemple me retourne une chaîne, de cette chaîne j'aimerais extraire les variables $title et $text afin de les utiliser comme clés dans mon dictionnaire...

    Citation Envoyé par naxelas
    Par contre, ta méthode export() m'intrigue un peu. Elle demande comme argument un template. Mais elle devrait plutôt utiliser le template interne à la classe. Sauf si tu rends cette méthode statitique, ce qui aurait plus de sens.
    Hum le code est pour l'instant à l'état d'expérimentation donc il y a quelques truc qu'il faut mettre au point

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Février 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 76
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par Spack
    Un peu à côté en fait
    ok, je comprends maintenant .
    je souhaite extraire les variables à partir de la chaîne retournée lors de la lecture du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html>
      <head>
        <title>$title</title>
      <head>
      <body>
        <p>$text</p>
      </body>
    </html>
    La lecture de ce fichier par exemple me retourne une chaîne, de cette chaîne j'aimerais extraire les variables $title et $text afin de les utiliser comme clés dans mon dictionnaire...
    Les expressions régulières devraient convenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    >>> html = """<html>
    ...   <head>
    ...     <title>$title</title>
    ...   <head>
    ...   <body>
    ...     <p>$text</p>
    ...     <p>${other_text}</p>
    ...   </body>
    ... </html>"""
    >>> pattern = "\$[{]?([a-zA-Z_][\w]*)[}]?"
    >>> re.compile(pat).findall(html)
    ['title', 'text', 'other_text']
    >>>

  5. #5
    Membre actif

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 239
    Points
    239
    Par défaut
    Merci de ton aide mais j'ai un problème avec cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> re.compile(pat).findall(html)
    d'où sortent re et pat ??
    En tappant le code que tu donne j'ai cette erreur :
    Traceback (most recent call last):
    File "<stdin>", line 1, in ?
    NameError: name 're' is not defined

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Février 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 76
    Points : 103
    Points
    103
    Par défaut
    Ah j'oubliais, re est le module de regexp.
    En fait, ce code utilise juste une regexp pour trouver toutes les variables.
    voici le code rectifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    >>> import re
    >>> html = """<html>
    ...   <head>
    ...     <title>$title</title>
    ...   <head>
    ...   <body>
    ...     <p>$text</p>
    ...     <p>${other_text}</p>
    ...   </body>
    ... </html>"""
    >>> pattern = "\$[{]?([a-zA-Z_][\w]*)[}]?"
    >>> re.compile(pattern).findall(html)
    ['title', 'text', 'other_text']
    >>>

  7. #7
    Membre actif

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 239
    Points
    239
    Par défaut
    Ben merci, ça fonctionne parfaitement...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Extraction d'éléments dans une chaîne de caractères
    Par ahoure dans le forum Access
    Réponses: 4
    Dernier message: 18/12/2014, 17h58
  2. Macro Variable dans une chaîne de caractères
    Par discus23 dans le forum Macro
    Réponses: 5
    Dernier message: 11/07/2012, 13h51
  3. Insertion de plusieurs variables dans une chaîne
    Par mustapha_ess dans le forum C++
    Réponses: 1
    Dernier message: 10/08/2010, 14h13
  4. interprétation des variables dans une chaîne
    Par marts dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2009, 20h01
  5. Peut-on inclure une variable dans une chaîne SQL ?
    Par beegees dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2006, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo