[Python3] le bon pattern !? Le sujet est résolu

Tout ce qui concerne la programmation.
Répondre
Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1343
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

Bonjour,

Pour le code HTML suivant ou similaire :

Code : Tout sélectionner

<article id="mytux_200px.png_1524491799">
<header><h2>Image "<strong><a href="/home/zou/Images/TUX/MyTux_200px.png">MyTux_200px.png</a></strong>" envoyée sur <em>Debian-fr</em></h2><time datetime="2018-04-23 15:56:39">23-04-2018 à 15:56:39</time></header>
<div class="container-fluid"><div class="row"><div class="col-sm-3"><h3>Paramètres choisis : </h3><ul><li>Informations facultatives : <strong>Non</strong></li><li>Description de l'image : <strong>Aucune</strong></li><li>Étiquettes : <strong>Aucune</strong></li></ul><hr><ul><li>Image en mode privé : <strong>Non</strong></li></ul><hr></div><div class="col-sm-9 brd-l"><h3>Informations retournées : </h3><dl><dt>URL d'accès à l'image : <strong><a href="https://www.forum-debian.fr/upload/img/1524491801.png" title="URL d'accès à l'image : MyTux_200px.png">https://www.forum-debian.fr/upload/img/1524491801.png</a></strong></dt><dd class="layout">Afficher l'image : <strong><a href="https://www.forum-debian.fr/upload/original/1524491801.png" title="Afficher l'image : MyTux_200px.png">https://www.forum-debian.fr/upload/original/1524491801.png</a></strong></dd><dd>Code pour insérer la miniature dans le forum : <br><input type="text" readonly="readonly" size="121" value="[url=https://www.forum-debian.fr/upload/img/1524491801.png][img]https://www.forum-debian.fr/upload/thumb/1524491801.png[/img][/url]"/></dd><dd class="layout">Code pour insérer l'image dans le forum : <br><input type="text" readonly="readonly" size="119" value="[url=https://www.forum-debian.fr/upload/img/1524491801.png][img]https://www.forum-debian.fr/upload/img/1524491801.png[/img][/url]"/></dd><dd>Code pour insérer la miniature sur votre site web : <br><input type="text" readonly="readonly" size="205" value="&lt;a href=&quot;https://www.forum-debian.fr/upload/img/1524491801.png&quot; title=&quot;Afficher cette image miniature : MyTux_200px.png&quot;&gt;&lt;img alt=&quot;MyTux_200px.png&quot; src=&quot;https://www.forum-debian.fr/upload/thumb/1524491801.png&quot;/&gt;&lt;/a&gt;"/><br><a href="https://www.forum-debian.fr/upload/img/1524491801.png" title="Afficher cette image miniature : MyTux_200px.png"><img alt="MyTux_200px.png" src="https://www.forum-debian.fr/upload/thumb/1524491801.png"/></a></dd><dd class="layout">Code pour insérer l'image sur votre site web : <br><input type="text" readonly="readonly" size="189" value="&lt;a href=&quot;https://www.forum-debian.fr/upload/img/1524491801.png&quot; title=&quot;Afficher l&#x27;image : MyTux_200px.png&quot;&gt;&lt;img alt=&quot;MyTux_200px.png&quot; src=&quot;https://www.forum-debian.fr/upload/img/1524491801.png&quot;/&gt;&lt;/a&gt;"/><br><a href="https://www.forum-debian.fr/upload/img/1524491801.png" title="Afficher l'image : MyTux_200px.png"><img alt="MyTux_200px.png" src="https://www.forum-debian.fr/upload/img/1524491801.png"/></a></dd></dl></div>
</div></div></article>
je cherche le bon pattern pour qu'il me détruise l'ensemble de ce code...

Sachant que j'ai créé la fonction suivante :

Code : Tout sélectionner

def sed_lines(self, filename, pattern=None, replace=None):
        '''Edit file to replace lines'''

        try:
            self.log.info('=> Sed Lines :: Filename : %s' % filename)
            self.log.debug('=> Sed Lines :: pattern : %s' % pattern)

            with open(filename, 'r') as rfile:
                lines = rfile.readlines()
                self.log.debug('=> Sed Lines :: Lines: %s' % lines)

            with open(filename, 'w') as wfile:
                for line in lines:

                    #if filename == self.config['info']['Services']['logname']:
                    if pattern in line:
                        reg = re.compile(r'' + pattern, re.MULTILINE)
                        line = reg.sub(replace, line)
                        del(reg)

                    wfile.write(line)
                            
            return True

        except ImportError as iee:
            self.log.exception('Error to import module: %s' % iee)
            return False

        except IOError as ioe:
            self.log.exception('Error to write document: %s' % ioe)
            self.wmssg.display('error', self.texts['error']['write_file'] % ioe)
            return False
Je l'appelle ainsi :

Code : Tout sélectionner

self.tool.sed_lines(self.files['html'], '<article (.*)</article>', '')
Mais apparemment, mon 'pattern' ne doit pas être bon, car rien n'est remplacé - dans ce cas, détruit... une idée ?!
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid | Devuan Ceres
----
Ne réponds pas aux PM d'assistance
Avatar de l’utilisateur
funkygoby
Membre
Membre
Messages : 106
Inscription : 15 mai 2016, 15:54
Status : Hors-ligne

Tu as du texte et tu veux supprimer une partie, contenue entre 2 balises ?

Comme c'est du code html, je partirai sur beautifulsoup4. Le module s'appelle python3-bs4 chez Debian et py3-beautifulsoup4 chez OBSD.

Code : Tout sélectionner

bs = bs4.BeautifulSoup(page.text, "html.parser")
bs.find('articles.mytux_200px.png_1524491799').decompose()
Si tu as plusieurs éléments à supprimer, bs4.select() retourne une liste qui correspond à tes critères.
Ici, j'ai cherché par rapport à l'id. Tu peux aussi cherche r/ à la classe, etc ...
Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1343
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

Oui, c'est la solution que j'ai adopté, bs4...
Du coup, je vais retravailler toute la partie de génération de code html avec ;)

Code : Tout sélectionner

for article in soup.findAll("article"):
                    article.extract()
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid | Devuan Ceres
----
Ne réponds pas aux PM d'assistance
Répondre