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 :

Requête Python - Extraction caractère à l'intérieur d'une parenthèse [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Par défaut Requête Python - Extraction caractère à l'intérieur d'une parenthèse
    Bonjour,

    J'ai une liste de 13000 enregistrement et j'essaye d'extraire le temps en relation avec un chiffre.

    (442 01:55), (242 02:51), (272 05:00), (472 05:06)
    (535 04:00), (235 04:09), (242 03:44), (449 04:44), (442 05:13)
    (242 03:14)

    Le chiffre auquel je désire extraire son temps est le 242 donc 2:51 pour le 1er exemple et 03:44 pour le deuxième. Le 242 ne se retrouve jamais dans le même ordre au niveau des paranthèses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def extraire_temps(unit):
     if unit == "Indéterminée":
       return ""
     else:
       substring = unit[unit.find('242')+1 : unit.find(')')]
       substring2 = substring.split(" ") [1]
       return substring2[:5]
    Voici ma requête mais j'obtiens une erreur.

    Merci de votre aide

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Essayez de comprendre comment .find fonctionne.
    La console Python est bien pour çà.
    Votre chaîne de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> unit = '''(442 01:55), (242 02:51), (272 05:00), (472 05:06)
    ... (535 04:00), (235 04:09), (242 03:44), (449 04:44), (442 05:13)
    ... (242 03:14)'''
    La position du 1er '242' est donnée par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> unit.find('242')
    14
    Mais unit.find(')') va retourner la position du premier ")":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> unit.find(')')
    10
    Mais ce que vous voulez c'est la position du premier ")" après la position 14:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> unit[14:].find(')')
    9
    La sous-chaine a extraire est donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> ss = unit[14:14+9]
    >>> ss.split()
    ['242', '02:51']
    >>>
    Cela compris, vous pourrez corriger vous même votre code.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Essayez de comprendre comment .find fonctionne.
    La console Python est bien pour çà.
    Votre chaîne de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> unit = '''(442 01:55), (242 02:51), (272 05:00), (472 05:06)
    ... (535 04:00), (235 04:09), (242 03:44), (449 04:44), (442 05:13)
    ... (242 03:14)'''
    - W
    Bonjour Wiztricks,

    Merci pour l'explication !! Je me suis peut-être mal expliqué mais ce n'est pas une chaîne de caractères mais bien une table pour laquelle j'aimerais peupler le temps du 242 dans une autre colonne.

    Nom : Capture.JPG
Affichages : 415
Taille : 43,5 Ko

    Est-ce que cela change le fonctionnement de la requête ?

    Merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Citation Envoyé par pi_hellz Voir le message
    Merci pour l'explication !! Je me suis peut-être mal expliqué mais ce n'est pas une chaîne de caractères mais bien une table pour laquelle j'aimerais peupler le temps du 242 dans une autre colonne.

    Est-ce que cela change le fonctionnement de la requête ?
    Je ne vois pas de "requête" ni de "table" dans le code que vous avez montré. Et si le graphique que vous montrez ressemble bien à un tableau, je ne vois pas le code correspondant. Sans comprendre de quoi vous parlez, pas facile de vous aider.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re,

    Est-ce que ceci pourrait convenir ?

    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
    19
    20
    21
    22
    23
    24
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import re
     
    # extraction d'une durée en fonction de sa clé d'identification
    def get_delay (key, data):
        found = re.search(r"\({:d} (.*?)\)".format(key), str(data))
        return found and found.group(1) or ""
    # end def
     
    # on ouvre le fichier contenant les données
    with open("data.txt") as datafile:
        # on parcourt le fichier ligne à ligne
        for line in datafile:
            # on recherche la durée pour la clé 242
            delay = get_delay(242, line)
            # si trouvé
            if delay:
                # mettez delay dans la colonne voulue
                print "trouvé:", delay
            # end if
        # end for
    # end with
    @+.

  6. #6
    Membre confirmé
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Par défaut
    Je suis entrain de me rendre compte qu'étant donnée que j'utilise ArcGIS avec requête en python, je n'ai peut-être pas posté dans le bon endroit car je appeler de script pour peupler mes colonnes.

    Je croyais que ma requête était une simple erreur au niveau de la syntaxe de la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    substring = unit[unit.find('242')+1 : unit.find(')')]
    Si jamais je parviens a trouver la solution par essai/erreur je la posterai ici.

    Merci encore de votre du moins cela me sert à améliorer mes compétences en python

    Citation Envoyé par tarball69 Voir le message
    Re,

    Est-ce que ceci pourrait convenir ?

    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
    19
    20
    21
    22
    23
    24
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import re
     
    # extraction d'une durée en fonction de sa clé d'identification
    def get_delay (key, data):
        found = re.search(r"\({:d} (.*?)\)".format(key), str(data))
        return found and found.group(1) or ""
    # end def
     
    # on ouvre le fichier contenant les données
    with open("data.txt") as datafile:
        # on parcourt le fichier ligne à ligne
        for line in datafile:
            # on recherche la durée pour la clé 242
            delay = get_delay(242, line)
            # si trouvé
            if delay:
                # mettez delay dans la colonne voulue
                print "trouvé:", delay
            # end if
        # end for
    # end with
    @+.

  7. #7
    Membre confirmé
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Par défaut
    Je travaille avec ArcGIS et utilise le field calculator avec l'interpreteur en python pour effectuer ma requête.

    Ma table est en pièce jointe

    Voici la requête tel indiqué dans mon premier message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def extraire_temps(unit):
     if unit == "Indéterminée":
       return ""
     else:
       substring = unit[unit.find('242')+1 : unit.find(')')]
       substring2 = substring.split(" ") [1]
       return substring2[:5]
     
    __esri_field_calculator_splitter__
    extraire_temps( !LISTE_CAS!)
    En esperant que c'est plus clair
    Fichiers attachés Fichiers attachés

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par pi_hellz Voir le message
    Bonjour,

    J'ai une liste de 13000 enregistrement et j'essaye d'extraire le temps en relation avec un chiffre.

    (442 01:55), (242 02:51), (272 05:00), (472 05:06)
    (535 04:00), (235 04:09), (242 03:44), (449 04:44), (442 05:13)
    (242 03:14)

    Le chiffre auquel je désire extraire son temps est le 242 donc 2:51 pour le 1er exemple et 03:44 pour le deuxième. Le 242 ne se retrouve jamais dans le même ordre au niveau des paranthèses.
    Merci de votre aide
    Bonjour,

    j'ajouterais (pour élargir le débat) que l'on peut aussi jouer avec les expressions régulières pour traiter simplement ce genre de problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import re
     
    data = """\
    (442 01:55), (242 02:51), (272 05:00), (472 05:06)
    (535 04:00), (235 04:09), (242 03:44), (449 04:44), (442 05:13)
    (242 03:14)
    """
     
    found = re.findall(r"\(242 (.*?)\)", data)
     
    print "trouvé:", found
    doc officielle : https://docs.python.org/3/library/re.html

    @+.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par pi_hellz Voir le message
    Bonjour,

    Voici ma requête mais j'obtiens une erreur.

    Merci de votre aide
    Je me basais sur ce que le PO affirmait dans son premier post.

    @+.

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

Discussions similaires

  1. requête d'extraction sur le nom égal à des caractères numériques
    Par bouba_95 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 10/01/2007, 16h58
  2. [Débutant][SQL] Requête SQL à l'intérieur d'une requête SQL
    Par Kily10 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/10/2006, 11h54
  3. extraction caractère à partir d'une table
    Par By-nôm dans le forum Access
    Réponses: 6
    Dernier message: 04/08/2006, 15h13
  4. extraction caractère d'une chaine.
    Par Fabouney dans le forum Langage
    Réponses: 3
    Dernier message: 02/03/2006, 14h10
  5. Requête pour remplacer caractères dans une table
    Par elliott1961 dans le forum Installation
    Réponses: 5
    Dernier message: 16/01/2006, 01h47

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