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 :

Debutant : Recherche d'informations dans fichiers contenants caracteres speciaux €


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    sans activité
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Debutant : Recherche d'informations dans fichiers contenants caracteres speciaux €
    Bonjour,

    Total débutant, je découvre la programmation avec python et veux l'utiliser pour obtenir des statistiques à partir de beaucoup de fichiers .TXT :
    Tout fonctionne bien sauf un seul soucis : le symbole "€"
    Par exemple je veux savoir combien il y a de jean 50€ et de jean 150€ dans les 4 lignes suivantes :

    1: jean, blablabla €50.00 (100%)
    1: jean, blablabla €150.00 (100%)
    1: jean, blablabla €50.00 (100%)
    1: jean, blablabla €50.00 (100%)

    ma ligne de code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if "jean" in line and "50.00" in line:
         jean50 +=1
    if "jean" in line and "150.00" in line:
         jean150 +=1
    Le soucis c'est que python considere que dans "150.00" il y a "50.00"

    Il faut donc que j’écrive

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if "jean" in line and "50.00' in line:
        jean50 +=1
    mais malgré beaucoup de tentative, je n'y arrive pas... cela retourne toujours 0 resultats.

    J'imagine qu'il faut import unicodedata au debut du fichier, puis remplacer le symbole € par (u"\u20AC") dans ma ligne de commande, mais je n'arrive pas à le faire fonctionner.

    Avez vous une idée ??

    Merci
    Alex

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par alexchiangmai Voir le message
    Avez vous une idée ??
    Ca serait bien de mettre en forme les données i.e. extraire d'une ligne "1: jean, blablabla €50.00 (100%)", les informations qui vous intéressent: ('jean', "50.00") puis transformer le 2ième élément de ce tuple en float enfin, effectuer des calculs sur la liste obtenue.

    Normalement, nous utilisons plutôt des expression régulières et le module re mais c'est quand on débute c'est un peu raide.
    Vous pouvez vous en sortir en disant:
    • "jean" est la sous-chaine de caractères qui commence après le premier ' ' et qui se termine avant le "," suivant,
    • "50.00" est la sous-chaine qui commence après le '€' et qui se termine avant le ' ' suivant.

    Après pour coder çà en Python, il faut connaître un peu ce qu'on peut faire avec des chaines de caractères (qui sont des types de bases):
    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
    # -*- coding:utf-8 -*-
     
    lines = '''1: jean, blablabla €50.00 (100%)
    1: jean, blablabla €150.00 (100%)'''
     
    total = 0.0
    for line in lines.splitlines():
        s = line.index(' ', 0) + 1
        e = line.index(',', s)
        print('nom:', line[s:e], end=' -')
     
        s = line.index('€', e) + 1
        e = line.index(' ', s)
        print('prix:', line[s:e])
     
        total += float(line[s:e])
    print('total:', total)
    Pour apprendre et voir ce qu'on peut faire avec les types de bases, vous avez de bons tutos qui vous donneront aussi des exemples de code pour démarrer.

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

  3. #3
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Bonsoir,
    Je suis désolé, je ne comprends pas…
    Normalement en Python3 il n'y a plus de problème d'encodage.

    En lecture du fichier, si le "print" d'une ligne renvoie le caractère "€" correctement il ne devrait pas y avoir de problème!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> ma_lst = list(("jean, blablabla €50.00 (100%)", "jean, blablabla €150.00 (100%)", "jean, blablabla €50.00 (100%)", "jean, blablabla €50.00 (100%)"))
    >>> j50 = 0
    >>> for lig in a:
    	if "jean" in lig and "€50" in lig:
    		j50 += 1
     
     
    >>> print(j50)
    3
    >>>
    D'autre part, si la reconnaissance de "€" chez alexchiangmai ne fonctionne pas, l'indexage ne devrait pas non plus fonctionner!

    Non? Il y a quelque chose que je n'ai pas compris?

    Clodion

    PS: alexchiangmai: avez-vous essayé de faire un "print(ligne)"? Qu'est-ce que cela renvoie?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Clodion Voir le message
    Je suis désolé, je ne comprends pas…
    Normalement en Python3 il n'y a plus de problème d'encodage.
    Le classement Python3.X n'est pas "automatique".
    Les exemples de code donnés sont syntaxiquement faux (à cause des "'" dans "€50': je ne les ai pas tous corrigé en ajoutant des balises code).
    Avec çà on peut conjecturer ce qu'on veut...

    Ce que j'évite en essayant de montrer qu'il existe des méthodes simples pour triturer les chaînes de caractères et des tutos pour voir ce qu'il y a sous le capot.

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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    sans activité
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci

    Grace à vos réponses j'ai "print" mon fichier pour voir comment les symboles € sortaient :

    quand j'ouvre le fichier txt sous windows je voit :
    €50.00 (100%)
    quand je le print sous python, je voit :
    €50.00 (100%)


    Donc j'ai décidé d'écrire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if "jean" in line and "€50.00" in line:
        jean50 +=1
    if "jean" in line and "€150.00" in line:
         jean150 +=1
    Ça semble fonctionner.

    Alex

Discussions similaires

  1. Recherches d'informations dans un recordset
    Par the_6L20 dans le forum Access
    Réponses: 3
    Dernier message: 14/08/2006, 14h31
  2. Réponses: 1
    Dernier message: 18/07/2006, 20h09
  3. Réponses: 1
    Dernier message: 11/05/2006, 15h57
  4. [DEBUTANT]Recherche mot contenu dans une String
    Par lynxman dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 11h49
  5. [FPDF] Recherche chaine caractères dans fichier pdf
    Par licorne dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 28/10/2005, 11h55

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