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 :

Expression régulière


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut Expression régulière
    Bonjour,

    Je suis débutant avec python et mon problème consiste de extraite des donné d'une structure bien définis et d'envoyé le résultat a un fichier csv ou text et voici l'exemple:

    Input_Data:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input id="obj1"value="Zureti Fabrice|||ONEWAY|Comptabte|101|10032010||0810|1815|R||||Xhgd=&|0|000013//Zuretti/Mzi7_w==/P3E=/I/|013|2" />
    Résultat::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zureti Fabrice;ONEWAY;Comptabte;101;10032010;0810;1815;013
    Voici le code que je viens de l'ecrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import re
     
    input_data = '<input id="obj1"value="Zureti Fabrice|||ONEWAY|Comptabte|101|10032010||0810|1815|R||||Xhgd=&|0|000013//Zuretti/Mzi7_w==/P3E=/I/|013|2" /> '
     
    string = re.findall('<input .*?value="(.+)"', input_data)[0]

    une erreur je ne viens pas la compredre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "/home/DEBIBI/workspace/py/First/src/strasbourg.py", line 12, in <module>
      string= re.findall('input .*?value="(.+)"', input_data)[0]
      File "/usr/lib/python2.6/re.py", line 175, in findall
        return _compile(pattern, flags).findall(string)
    TypeError: expected string or buffer

    Merci pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    ton code fonctionne chez moi.

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    je ne sais pas pourquoi ca fonctionne pas

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut
    En effet ton code fonctionne chez moi aussi.
    Par contre, j'ai réussi à obtenir ton erreur, tout simplement en mettant autre chose qu'un string dans input_data (ton message d'erreur est quand même assez explicite)
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> input_data = 1 # ou None, ou [], ou...
    >>> string = re.findall('<input .*?value="(.+)"', input_data)[0]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.6/re.py", line 177, in findall
        return _compile(pattern, flags).findall(string)
    TypeError: expected string or buffer
    Ton erreur vient donc probablement de l'initialisation de input_data.

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut le problème persiste
    Je ne sais pas pourqu'oi ça marche pas encore, en faite j'utilise py pour eclipse, avec la version 2.6.

    et voila tous le code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from BeautifulSoup import BeautifulSoup
    import urllib
    import re
     
     
     
    url = "http://www.xxxxxxxxxxxxxxxxx"
    page = urllib.urlopen(url).read()
    soup = BeautifulSoup(page)
    data_input= soup.find("input", {"id": "obj1"})
     
    data_output= re.findall('input .*?value="(.+)"',data_input)[0]
     
    print data_output

    et voila l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
    File "/home/DEBIBI/workspace/py/First/src/strasbourg.py", line 12, in <module>
    affich= re.findall('input .*?value="(.+)"',data_input)[0]
    File "/usr/lib/python2.6/re.py", line 175, in findall
    return _compile(pattern, flags).findall(string)
    TypeError: expected string or buffer
    merci pour votre aide

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut
    La méthode find() de BeautifulSoup ne renvoie pas une string. Il faut convertir data_input en string avant de l'envoyer à re.findall()

Discussions similaires

  1. [RegEx] Expression régulières : Balises <SCRIPT>
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 23h25
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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