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 :

Pb sur un split()


Sujet :

Python

  1. #1
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut Pb sur un split()
    Bonjour,

    J'ai un souci sur l'utililsation d'une fonction split().
    J'ai une phrase complète, pour laquelle j'essaye de retrouver les mots, sans tenir compte des ,.;:...

    Mais, la fonction split() ne me renvoie rien.
    J'ai essayé sur une ligne de commande les instructions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chaine = 123, 456, 789. 13245
    liste = chaine.split(' ,')
    mais selon l'ordre des séparateurs, le retour n'est pas le même...

    dans un cas, la liste est vide, dans l'autre, les mots sont bien retrouvés...

    comment ce fait-ce ?

    note : python 2.4

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Qu'est ce que c'est , cette façon d'écrire une chaine sans quotes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = '123, 456, 789. 13245'
    je comprends ce que c'est, mais ton écriture non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = 123, 456, 789, 13245
    pourrait être un tuple, mais dans ton écriture il y a un point qui l'empèche

  3. #3
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut


    oui, dans l'élan, j'ai oublié de mettre les cotes ! :o)

    J'ai pas Internet ou je suis... Voici un exemple de mon souci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> chaine = "abcd, defgh : ijkl mnop. Qrtst ?"
    >>> liste = chaine.split("., ")
    >>> print liste
    ['abcd, defgh : ijkl mnop. Qrtst ?']
    >>> liste = chaine.split(", ")
    >>> print liste
    ['abcd', 'defgh : ijkl mnop. Qrtst ?']

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Tu peux déjà enlever la ponctuation puis séparer les mots:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    chaine = "abcd, defgh : ijkl mnop. Qrtst ?"
    ponct = ".,;:?!"
    for p in ponct:
        chaine = chaine.replace(p, "")
    chaine = chaine.split()
    print chaine

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Le mieux à faire quand on est confronté à un résultat qui n'est pas celui qu'on attendait, c'est de se dire que c'est soi qui a tort et pas la machine.
    Si split("., ") ne découpe pas, c'est qu'il n'a aucune raison de découper: comme il n'y a pas de "point virgule blanc" dans la chaine, on conclut que le motif indiqué à split() est un séparateur rigide et que split() ne fonctionne pas de façon similaire à slip().

    Je pense comme nyko, mais je ferais plutôt avec une regex en une seule passe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import re
     
    RE = ',|\.|;|:|\.\.\.|!|\?'
    chaine = "abcd, defgh : ijkl mnop. Qrtst ?"
    print chaine
     
    g = re.sub(RE,' ',chaine)
    print g
     
    print g.split()

  6. #6
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    ok, c'est une erreur d'incompréhension de la doc...
    je pensais fournir une liste de séparateurs et non pas la chaîne séparatrice...

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Probleme sur Fonction Split
    Par Jeyjey1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/07/2011, 14h48
  2. Question sur String[] split()
    Par k3nsou dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 24/04/2009, 10h05
  3. Question sur le Split()
    Par chris81 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/12/2008, 18h02
  4. problème sur un split
    Par Ickou dans le forum Langage
    Réponses: 5
    Dernier message: 13/01/2006, 19h22
  5. Réponses: 3
    Dernier message: 08/09/2003, 15h06

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