Path: csiph.com!news.mixmin.net!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Pierre Maurette Newsgroups: fr.comp.lang.python Subject: Re: conversion en string raw Date: Wed, 19 Oct 2016 09:05:02 +0200 Organization: A noiseless patient Spider Lines: 109 Message-ID: References: <580667da$0$3334$426a74cc@news.free.fr> Reply-To: maurette.pierre@free.fr Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15"; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: mx02.eternal-september.org; posting-host="86d70a9a48d9c4186738b40887c0fdc0"; logging-data="6130"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+iUrpx0SRhvR294kEP/D2TK6FD0EIagDc=" X-Newsreader: MesNews/1.08.06.00-fr X-Face: cmi$3R1_J{[}5K|8d'LDiJ$SsZ*gn,j*PhJ#KVGt+45,E_N9O}GrhhQ>fb&q<&lz=g%PEv' u"m)N|KrBMux?2:E?N7Uw3L#H>L#GwM}gY:.`W.qu z`1'W'h-AXPmB]#7~<+@H.<0M`-jBkCWbmkcT_*LBVD3|p1a?h1H;cHq{$-vbeP@Hdcqp5z~lwU7ZK `~ Cancel-Lock: sha1:bOS7L7KvRGzknsC7r0jzKmhIjR8= Xref: csiph.com fr.comp.lang.python:2946 plp : > Bonjour, > > J'écris un script pour supprimer les spams directement sur une boite IMAP. > Cela fonctionne mais pour l'instant, je stocke mes expressions régulières > directement dans mon code, dans une liste du style > > liste_regex = [ > r'.*@vgtru.*', > r'.*@billgst.*', > r'.*@.*mademoiselle.*shopping.*', > r'.*@.*canalprivilege.*', > r'.*@.*design.*atylia.*', > r'.*@.*news.*info2pro.*' > ] > > Je fais ensuite un re.match() sur les mails avec cette liste et cela > fonctionne. > > Maintenant, je voudrais sortir les regex de mon script pour les stocker dans > un fichier texte (ou une bdd) comme cela : > .*@vgtru.* > .*@billgst.* > .*@.*mademoiselle.*shopping.* > .*@.*canalprivilege.* > .*@.*design.*atylia.* > .*@.*news.*info2pro.* > > J'arrive évidemment à lire le fichier txt et à alimenter la liste mais je > n'arrive pas à obtenir le format raw apporté par le r'' et donc mon > re.match() ne fonctionne plus. > > Avez-vous une solution ? Justement l'avantage du fichier txt en entrée de données est de ne pas avoir à se "préoccuper du r". C'est un truc que j'utilise énormément pour pouvoir par exemple entrer des chemins par copier-coller. En particulier des chemins Windows sans modifier les antislashes, et encore plus en particulier quand un antislash est final. Peut-être avez-vous loupé (trop réfléchi ?) votre fichier .txt ? Peut-être le lisez-vous mal ? C'est peut-être un des cas où un 'r' est nécessaire, et non un 'rb'. Par curiosité, j'ai testé (sous Windows et Linux, en 2.7.x et 3.4.x, mêmes résultats): fichier test.txt: .*@vgtru\t.* .*@billgst.* .*@vgtru\t.* .*@billgst.* .*@.*mademoiselle.*shopping.* .*@.*canalprivilege.* .*@.*design.*atylia.* .*@.*news.*info2pro.* fichier test.py: #!/usr/bin python3 # -*- coding: utf-8 -*- import sys print(sys.version) liste_regex = [ r'.*@vgtru\t.*', r'.*@billgst.*', '.*@vgtru\t.*', '.*@billgst.*', r'.*@.*mademoiselle.*shopping.*', r'.*@.*canalprivilege.*', r'.*@.*design.*atylia.*', r'.*@.*news.*info2pro.*' ] with open('test.txt', 'r') as fichier: for n, line in enumerate(fichier.readlines()): print('%s [ %s (%s) | %s (%s) ]' % (line.strip() == liste_regex[n], line.strip(), type(line.strip()), liste_regex[n] , type(liste_regex[n]))) Par rapport à votre exemple, j'ai ajouté un \t qui justifie le r''. J'ai également ajouté deux lignes sans ce r'', dont une avec le caractère spécial. Le résultat est conforme à mes attentes, et à partir de ce résultat, je ne vois pas comment vos regex pourraient ne pas fonctionner: D:\Pythons\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\pythonw.exe U:/EclipseWorkspaces/EclipsePython/test/src/test.py 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] True [ .*@vgtru\t.* () | .*@vgtru\t.* () ] True [ .*@billgst.* () | .*@billgst.* () ] False [ .*@vgtru\t.* () | .*@vgtru .* () ] True [ .*@billgst.* () | .*@billgst.* () ] True [ .*@.*mademoiselle.*shopping.* () | .*@.*mademoiselle.*shopping.* () ] True [ .*@.*canalprivilege.* () | .*@.*canalprivilege.* () ] True [ .*@.*design.*atylia.* () | .*@.*design.*atylia.* () ] True [ .*@.*news.*info2pro.* () | .*@.*news.*info2pro.* () ] Process finished with exit code 0 -- Pierre Maurette