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
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Doug713705
Le 18-10-2016, plp nous expliquait dans fr.comp.lang.python (<580667da$0$3334$) :
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.
Je passe peut-être à coté de quelque chose mais d'après moi, à moins que tu aies d'autres expressions régulières que celles-ci, je ne vois pas pourquoi tu aurais besoin de raw strings dans la mesure où tu n'utilises aucun caractère spéciaux (n, t, etc). Cependant, pour répondre à ta question, appliquer ma_chaine = ma_chaine.encode('string-escape') à chacune des chaines de caractères lues devrait faire l'affaire. -- Je ne connaîtrai rien de tes habitudes Il se peut même que tu sois décédée Mais j'demanderai ta main pour la couper -- H.F. Thiéfaine, L'ascenceur de 22H43
Le 18-10-2016, plp nous expliquait dans
fr.comp.lang.python
(<580667da$0$3334$426a74cc@news.free.fr>) :
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
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.
Je passe peut-être à coté de quelque chose mais d'après moi, à moins que
tu aies d'autres expressions régulières que celles-ci, je ne vois pas
pourquoi tu aurais besoin de raw strings dans la mesure où tu n'utilises
aucun caractère spéciaux (n, t, etc).
Cependant, pour répondre à ta question, appliquer
ma_chaine = ma_chaine.encode('string-escape')
à chacune des chaines de caractères lues devrait faire l'affaire.
--
Je ne connaîtrai rien de tes habitudes
Il se peut même que tu sois décédée
Mais j'demanderai ta main pour la couper
-- H.F. Thiéfaine, L'ascenceur de 22H43
Le 18-10-2016, plp nous expliquait dans fr.comp.lang.python (<580667da$0$3334$) :
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.
Je passe peut-être à coté de quelque chose mais d'après moi, à moins que tu aies d'autres expressions régulières que celles-ci, je ne vois pas pourquoi tu aurais besoin de raw strings dans la mesure où tu n'utilises aucun caractère spéciaux (n, t, etc). Cependant, pour répondre à ta question, appliquer ma_chaine = ma_chaine.encode('string-escape') à chacune des chaines de caractères lues devrait faire l'affaire. -- Je ne connaîtrai rien de tes habitudes Il se peut même que tu sois décédée Mais j'demanderai ta main pour la couper -- H.F. Thiéfaine, L'ascenceur de 22H43
Pierre Maurette
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: .*@vgtrut.* .*@billgst.* .*@vgtrut.* .*@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'.*@vgtrut.*', r'.*@billgst.*', '.*@vgtrut.*', '.*@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:PythonsWinPython-64bit-3.4.3.6python-3.4.3.amd64pythonw.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 [ .*@vgtrut.* (<class 'str'>) | .*@vgtrut.* (<class 'str'>) ] True [ .*@billgst.* (<class 'str'>) | .*@billgst.* (<class 'str'>) ] False [ .*@vgtrut.* (<class 'str'>) | .*@vgtru .* (<class 'str'>) ] True [ .*@billgst.* (<class 'str'>) | .*@billgst.* (<class 'str'>) ] True [ .*@.*mademoiselle.*shopping.* (<class 'str'>) | .*@.*mademoiselle.*shopping.* (<class 'str'>) ] True [ .*@.*canalprivilege.* (<class 'str'>) | .*@.*canalprivilege.* (<class 'str'>) ] True [ .*@.*design.*atylia.* (<class 'str'>) | .*@.*design.*atylia.* (<class 'str'>) ] True [ .*@.*news.*info2pro.* (<class 'str'>) | .*@.*news.*info2pro.* (<class 'str'>) ] Process finished with exit code 0 -- Pierre Maurette
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
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):
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:
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: .*@vgtrut.* .*@billgst.* .*@vgtrut.* .*@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'.*@vgtrut.*', r'.*@billgst.*', '.*@vgtrut.*', '.*@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:PythonsWinPython-64bit-3.4.3.6python-3.4.3.amd64pythonw.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 [ .*@vgtrut.* (<class 'str'>) | .*@vgtrut.* (<class 'str'>) ] True [ .*@billgst.* (<class 'str'>) | .*@billgst.* (<class 'str'>) ] False [ .*@vgtrut.* (<class 'str'>) | .*@vgtru .* (<class 'str'>) ] True [ .*@billgst.* (<class 'str'>) | .*@billgst.* (<class 'str'>) ] True [ .*@.*mademoiselle.*shopping.* (<class 'str'>) | .*@.*mademoiselle.*shopping.* (<class 'str'>) ] True [ .*@.*canalprivilege.* (<class 'str'>) | .*@.*canalprivilege.* (<class 'str'>) ] True [ .*@.*design.*atylia.* (<class 'str'>) | .*@.*design.*atylia.* (<class 'str'>) ] True [ .*@.*news.*info2pro.* (<class 'str'>) | .*@.*news.*info2pro.* (<class 'str'>) ] Process finished with exit code 0 -- Pierre Maurette