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 :

Supprimer des caractères d'une chaine


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 41
    Par défaut Supprimer des caractères d'une chaine
    Bonsoir.
    Pour supprimer des caractères de ma "chaine".
    J'ai utilisé translate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    chaine = ('(*(deve**loppez)*)*)')
    x = chaine.translate(None, ')*(')
    print x
    un bon résultat : developpez

    Cela fonctionne très bien. Mais, je pense que la fonction translate n'est pas fait pour ça!!!
    Il y a un problème à utiliser cette fonction comme cela.
    Merci.

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    il y a pleins de façons de faire, effectivement utiliser translate n'est pas la plus évidente
    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
    >>> chaine = '(*(deve**loppez)*)*)'
     
    >>> chaine.replace('*', '').replace(')', '').replace('(', '')
    'developpez'
     
    >>> ''.join(c for c in chaine if c in 'abcdefghijklmnopqrstuvwxyz')
    'developpez'
     
    >>> from re import sub
    >>> sub('[^a-z]', '', chaine)
    'developpez'
     
    >>> chaine[3:7]+chaine[9:15]
    'developpez'
     
    #et une dernière pour le fun et le cradingue :
    >>> filter(lambda x: x.upper() != x.lower(), chaine)
    'developpez'

  3. #3
    Membre expérimenté Avatar de cervo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 220
    Par défaut

    Je te conseillerai la methode avec les regex. pratique et portable !

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonsoir,

    La méthode str.translate n'est pas intuitive mais quand on apprend à l'utiliser on se passe vite des str.replace en cascades.

    Voici comment l'utiliser :

    Création d'une table de translation/traduction, limité à un seul caractère, c'est bien dommage au passage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    trans_table = str.maketrans({
        ")": "",
        "*": "",
        "(": "",
    })
    qui retourne un dictionnaire avec en clé le code unicode du caractère et en valeur le caractère unicode à traduire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {40: '', 41: '', 42: ''}
    Que l'on peut créer avec la syntaxe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trans_table = {ord(char): "" for char in ")*("}

    En python 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chaine = "(*(deve**loppez)*)*)"
    trans_table = str.maketrans({")": "", "*": "", "(": "", })
    x = chaine.translate(trans_table)
    >>> x
    'developpez'


    En python 2 & 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chaine = u"(*(deve**loppez)*)*)"
    trans_table = {ord(char): u"" for char in ")*("}
    x = chaine.translate(trans_table)
    >>> x
    u'developpez'

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Une autre solution plus simple / courte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chaine = '(*(deve**loppez)*)*)'
    x = "".join([c for c in chaine if c not in ")*("])
    >>> x
    'developpez'

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Mais, je pense que la fonction translate n'est pas fait pour ça!!!
    Quelle drôle d'idée! C'est clairement la méthode la plus simple (et probablement la plus performante) dans ton cas, pas besoin de charger de module, de compiler une pattern ou de parser x fois la chaîne. Si string.translate propose un paramètre "deletechars", autant en profiter!

  7. #7
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 41
    Par défaut oui
    Merci pour vos propositions les amis.
    À la fin je décide de profiter de translate
    Citation Envoyé par CosmoKnacki Voir le message
    Quelle drôle d'idée! C'est clairement la méthode la plus simple (et probablement la plus performante) dans ton cas, pas besoin de charger de module, de compiler une pattern ou de parser x fois la chaîne. Si string.translate propose un paramètre "deletechars", autant en profiter!

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/03/2013, 10h43
  2. Réponses: 3
    Dernier message: 04/05/2010, 08h58
  3. Réponses: 2
    Dernier message: 08/12/2009, 12h57
  4. [Tableaux] Supprimer morceaux de string dans string
    Par zulot dans le forum Langage
    Réponses: 9
    Dernier message: 04/03/2006, 16h35
  5. Incompatibilités Char et String
    Par architecte dans le forum Langage
    Réponses: 5
    Dernier message: 05/12/2005, 00h35

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