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 :

splitter une ligne de caractère


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 6
    Points
    6
    Par défaut splitter une ligne de caractère
    Bonjour,

    Je code sur Python depuis plus d'un an maintenant mais puisque la programmation n'est pas mon coeur de métier, j'ai pris beaucoup de mauvais réflexe que je vais essayer de corriger avec votre aide ^^ Je vous en remercie donc par avance!

    ma première question: Je souhaite couper une ligne (de caractère) en plusieurs chaines de caractère de longueur N :
    ex:
    line="111222333444555"
    resultat=[111,222,333,444,555]

    Pour le moment, j'ai deux solutions (pas très jolies?):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    field_1=line[0:2]
    field_2=line[2:4]
    etc.
    fields=[field_1,field_2, ...]
    deuxième solutions (j'ai essayé de rendre le code précédent plus "paramétrable":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        field=lambda field_nb,line:line[(field_nb-1)*3:field_nb*3]
        [field(x,line) for x in range(1,10)]
    Les deux codes ci dessus fonctionnent cependant le premier (que je trouve plus "moche") semble s'exécuter deux fois plus rapidement que le second! Avez vous une autre solution pour effectuer cette tache? de manière paramétrable (choisir facilement le nombre de caractère à utiliser comme délimiteur) et efficace?

    Merci par avance!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 241
    Points : 36 698
    Points
    36 698
    Par défaut
    Salut,

    Compliqué tout çà.
    Partez de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> line="111222333444555"
    >>> line[0:3]
    '111'
    maintenant si on veut découper avec une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> i = 0
    >>> line[i:i+3]
    '111'
    Reste à calculer i de 3 en 3.
    Pour çà vous avez "range":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> list(range(0, len(line), 3))
    [0, 3, 6, 9, 12]
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    super! merci !

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Autre possibilité avec les expressions régulières

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import re
    >>> line="111222333444555"
    >>> re.findall("\d{3}", line)
    ['111', '222', '333', '444', '555']
    findall

    Ce que dis la documentation concernant le pattern

    \d

    \d
    For Unicode (str) patterns:Matches any Unicode decimal digit (that is, any character in Unicode character category [Nd]). This includes [0-9], and also many other digit characters. If the ASCII flag is used only [0-9] is matched (but the flag affects the entire regular expression, so in such cases using an explicit [0-9] may be a better choice).For 8-bit (bytes) patterns:Matches any decimal digit; this is equivalent to [0-9].
    {3}

    {m}
    Specifies that exactly m copies of the previous RE should be matched; fewer matches cause the entire RE not to match. For example, a{6} will match exactly six 'a' characters, but not five.
    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)

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/09/2009, 21h08
  2. transformation d'une ligne de caractères
    Par miltone dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 23/03/2009, 22h49
  3. Lire une ligne de caractères et de doubles avec sscanf
    Par colinou dans le forum Débuter
    Réponses: 4
    Dernier message: 16/03/2008, 21h46
  4. Comparaison d'une ligne de caractères
    Par zennn dans le forum Débuter
    Réponses: 10
    Dernier message: 27/06/2007, 00h38

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