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 :

Chaine de caractere


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 32
    Points
    32
    Par défaut Chaine de caractere
    Bonjour,

    J'aimerais avoir votre avis concernant la reconnaissance d'une chaine de caractere à partir d'un mot, par exemple si j'ai " TRAJI_SF_DAT_CL" j'aimerais retourné True si ce mot contient le terme "_CL" et ici c'est le cas mais si c'est " TRAJI_SF_CLK_DAT" il me renvoi ossi True alors que la c'est pas bon. Alors je sais pas comment ajouter le retour chariot comme ceci "_CL$"

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if "_CL" in chaine:
        return True
    Edit : Désolé j'avais pas tout lu, voilà la modif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> if '_CL' in chaine[-3:]:
    ...     print(True)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 32
    Points
    32
    Par défaut
    Non j'ai déja fait sa et sa ne marche pas, il faudrait qu'il prenne en compte le retour chariot pour qu'il sache qu'il est en fin de chaine du genre "_CL$" pour d'autres languages mais la je sais pas comment faire

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 32
    Points
    32
    Par défaut
    ok mais en fait je doi prendre en compte "_CL_" et "_CL" dans ma chaine et du coup j'ai fais comme sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CL = "_CL" or "_CL_" # Dans un fichier de paramètre
     
    if CL in chaine:
        return True
    et la je sais pas comment faire pour rectifier l'erreur

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if "CL_" in chaine[-3:] or "_CL_" in chaine[-4:]:
        return True
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 224
    Points
    224
    Par défaut
    Si le but est de tester ton '_CL' ou '_CL_' est dans la chaîne ET à la fin de la chaîne, il existe la méthode endswith
    http://docs.python.org/library/stdty...l#str.endswith

    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
     
    >>> def foo(chaine):
    ...     CL = ("_CL", "_CL_")
    ...     return chaine.endswith(CL)
    ... 
    >>> foo(" TRAJI_SF_DAT_CL")
    True
    >>> foo(" TRAJI_SF_DAT_CL_")
    True
    >>> foo(" TRAJI_SF_CLK_DAT")
    False
    >>> foo(" TRAJI_SF_CL_K_DAT")
    False
    >>> foo(" TRAJI_SF_K_DAT")
    False
    >>>

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Ah oui endswith, j'y pense jamais

    Autre solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test = lambda a, b: a[-(len(b)):] == b
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> test(" TRAJI_SF_DAT_CL", "_CL")
    True
    >>> test(" TRAJI_SF_CLDAT_", "_CL")
    False
    >>> test(" TRAJI_SF_CLDAT_CL_", "_CL_")
    True
    >>> test(" TRAJI_SF_CL_DAT_", "_CL_")
    False
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut Et quid des regexp?
    Bonjour

    Pour ma part, je préfère toujours utiliser des regexp (surtout si bcp de tests de ce genre):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import re
     
    str = "TLR_TRUC_CL"
    pattern = "_CL$"
    if ( re.search(pattern, str) ) :
           #traitement si match ok
    else:
           #traitement si match KO
    Un peu de doc : http://docs.python.org/library/re.html
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Pour ma part, je préfère toujours utiliser des regexp (surtout si bcp de tests de ce genre):
    Ça dépend si vous préférez tué une mouche avec un marteau piqueur ou pas

    Personnellement j'utilise les re quand j'ai vraiment tout essayé avant. Niveau vitesse c'est pas très optimisé.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Premièrement, j'adore les marteaux.
    Deuxièmement, j'ai constaté qu'on se retrouve avec pas mal de tests à faire sur des chaînes dans la plupart des programmes.
    Passer avec re est structurant. Et le re.compile permet de ne pas trop perdre.

    Pour la lisibilité et la maintenance du code, je n'ai pas mieux
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  11. #11
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Niveau vitesse c'est pas très optimisé.
    bonjour,

    sur quelle base tu te fondes pour affirmer ceci ?

    de tous les tests que j'ai pu faire, quand il existe une solution évidente en utilisant les méthodes des chaines elles sont en effet plus rapides que les regex.

    par évidente j'entends une utilisation des méthodes de chaines existantes sur un volume de code n'excédant pas 3-5 lignes.

    pour tous les autres cas les regex sont plus rapides.

    kango

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Salut Kango,

    sur quelle base tu te fondes pour affirmer ceci ?
    Mon expérience, mais la tienne ne dit pas le contraire,

    de tous les tests que j'ai pu faire, quand il existe une solution évidente en utilisant les méthodes des chaines elles sont en effet plus rapides que les regex.
    Tu as tout dis, et d'ailleurs je dis la même chose un peu plus haut, je me cite,

    Personnellement j'utilise les re quand j'ai vraiment tout essayé avant
    par évidente j'entends une utilisation des méthodes de chaines existantes sur un volume de code n'excédant pas 3-5 lignes.
    Euh 3 à lignes tu exagères un peu non

    Il me semble que pour beaucoup de codes que j'ai pu tester, les re se trouvent souvent en dernière position.

    pour tous les autres cas les regex sont plus rapides.
    Il existe des cas (surtout parce-qu'on cherche pas très loin) où les regex sont plus rapides, surtout en lignes de code et en temps de codage, quoique les maîtriser c'est pas forcément évident, il faut pas mal d'entraînement avant de bien les comprendre.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  13. #13
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Euh 3 à lignes tu exagères un peu non
    pas tant que ça

    voici un des exemples que j'avais testé qui ne m'a pas l'air d'une complexité sans nom:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1 "champ 12" champ13
    2 champ22 champ23
    à splitter en:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (1, "champ 12", "champ13")
    (2, "champ22",  "champ23")
    les re c'étaient retrouvées plus rapides. c'est l'exemple type qui met le string.split en sucette

    et puis l'algorithme non basé sur les re est moins souple dès que le format de donnée change légèrement, par exemple devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 "champ 12" champ13
    2 champ22 champ23
    3 champ32 "champ 33"
    4 "champ 42" "champ 43"
    en fonction de comment tu as implémenté ton algo, tu peux être amené à tout revoir

    après il y a une différence importante entre:

    (les regex,) niveau vitesse c'est pas très optimisée
    et

    quand il existe une solution évidente en utilisant les méthodes des chaines elles sont en effet plus rapides que les regex.
    la première affirmation est très générale (et doit pas faire très plaisir aux gens qui ont développé ces fameuses regex) quand la deuxième est très circonstencielle

    enfin, je relèverai ceci:

    Deuxièmement, j'ai constaté qu'on se retrouve avec pas mal de tests à faire sur des chaînes dans la plupart des programmes.
    Passer avec re est structurant.
    complètement d'accord. d'ailleurs je me retrouve très souvent avec un module qui ne contient que des pattern de re que je peux utiliser à plusieurs endroits dans mon programme. Ca permet une réactivité accrue au changement de format, tout en documentant d'une certaine manière lesdits formats.

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    les re c'étaient retrouvées plus rapides. c'est l'exemple type qui met le string.split en sucette
    Oui possible, mais je ne parlais pas de cette méthode du module re, mais des méthodes search, match, findall, etc... qui sont en rapport avec une recherche de patterns.

    et puis l'algorithme non basé sur les re est moins souple dès que le format de donnée change légèrement, par exemple devient:
    Je suis d'accord plus ou moins, tout dépend de ton organisation de départ, mais il y a de grandes chances que des complications dans la méthode de recherche, t'oblige à revoir l'algo de départ et donc les re dans ce cas sont plus efficaces.

    Cependant les re, si on compare à une méthode de recherche je dirais basique, est souvent beaucoup plus lent, beaucoup de tests ont déjà été fait sur ce forum.

    Attention je parle de recherche sur des grosses tailles de fichier, pas sur 3 à 5 lignes où on n'y verra que du feu.

    en fonction de comment tu as implémenté ton algo, tu peux être amené à tout revoir
    Tout à fait d'accord, j'en ai parlé un peu plus haut aussi.

    et doit pas faire très plaisir aux gens qui ont développé ces fameuses regex
    Ce n'est pas pour une grande vitesse de recherche que ce module a été créé, mais simplement pour faire une recherche facile sans utiliser trop de lignes de code, ce qui est je trouve déjà très bien. On ne peut pas avoir le beurre et l'argent du beurre.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  15. #15
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut ... et Résolu ?
    @kali38 : As-tu compris notre débat d'expert et surtout, as-tu trouvé une solution à ton problème initial ? Si oui, un petit serait le bienvenu.
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Réponses: 13
    Dernier message: 13/06/2003, 14h13
  3. Pb Update avec chaine de caractere
    Par JuJu° dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/05/2003, 15h58
  4. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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