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 :

Recherche de valeurs et somme de valeurs correspondantes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Par défaut Recherche de valeurs et somme de valeurs correspondantes
    Bonjour,

    Je débute en python et souhaite manipuler des valeurs d'un fichier txt.

    Mon fichier txt contient des données du type:
    0.3 ; 1.5
    1 ; 0.5
    1.5 ; 2
    0.3 ; 0.1
    0.3 ; 0.5
    1.5 ; 1.5
    etc

    Je voudrais simplement faire un petit programme qui recherche une valeur (à gauche), somme les valeurs correspondantes (à droite) et efface les lignes en trop.
    Je voudrais obtenir au final quelque chose comme ça:
    0.3 ; 2.1
    1 ; 0.5
    1.5 ; 3.5

    Merci pour votre aide.

  2. #2
    Membre émérite
    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
    Par défaut
    Citation Envoyé par GregLass Voir le message
    Bonjour,

    Je débute en python et souhaite manipuler des valeurs d'un fichier txt.

    Mon fichier txt contient des données du type:
    0.3 ; 1.5
    1 ; 0.5
    1.5 ; 2
    0.3 ; 0.1
    0.3 ; 0.5
    1.5 ; 1.5
    etc

    Je voudrais simplement faire un petit programme qui recherche une valeur (à gauche), somme les valeurs correspondantes (à droite) et efface les lignes en trop.
    Je voudrais obtenir au final quelque chose comme ça:
    0.3 ; 2.1
    1 ; 0.5
    1.5 ; 3.5

    Merci pour votre aide.
    Bonsoir,
    Ce n'est pas très compliqué. Les étapes sont:
    -> ouvrir le fichier
    [-> tout mettre dans un dictionnaire (attention aux valeurs: après lecture ce seront des chaînes de caractères).
    -> créer un nouveau dictionnaire
    -> parcourir le premier en remplissant le second.
    ]
    -> tout mettre dans un dictionnaire en ajoutant directement une valeur à la valeur existante.
    Ensuite afficher le résultat.

    Clodion
    PS: il est aussi possible de passer par les listes, mais il faut alors gérer les deux listes en parallèle.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Par défaut
    Merci!!!

    Je ne connaissais pas les dictionnaires!
    J'essaye de me débrouiller seul pendant quelques jours...selon mes nouveaux problèmes je resolliciterai l'aide du forum.

    Encore merci!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Par défaut
    Bonjour,

    Après plusieurs le mieux que j'ai fait ressemble à ceci:

    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
    obj = open('testdico.txt','r')
    data=obj.read()
    #print(data)
    res = open('resdico.txt','w')
    ligne=data.split('\n')
    col=ligne.split(' ; ')
    deb=col[0]
    prob=col[1]
    dico={}
    i=1
    while i<len(ligne):   
        if deb not in dico:
            dico[deb]=prob
        else:
            dico[deb]+=prob
        res.write(dico)
        i=i+1
    objet.close()
    res.close()
    Malheureusement et malgré mes recherches je ne comprends pas le problème...peut etre avec le fait que certaines valeurs sont du type : 5.1188e-13 par exemple???

    Je joints le fichier txt...si ça peut aider! testdico.txt

    Merci d'avance!

  5. #5
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Une lib qui serait intéressante pour lire ou écrire ce genre de fichier serait csv.

    Je suis pas spécialiste de cette lib, ni d'aucune d'ailleurs
    Mais ça simplifierait un peu la chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import csv
     
    lecteur = csv.reader(open('testdico.txt'), delimiter=';', quoting=csv.QUOTE_NONNUMERIC)
     
    donnees = dict()
    for n in lecteur :
        if n[0] not in donnees.keys() :
            donnees[n[0]] = 0
        donnees[n[0]] += n[1]
     
    # Affichage
    for k in sorted(donnees.keys()) :
        print(k, ':', donnees[k])

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Par défaut
    Merci beaucoup!

    Mais quand j'enregistre le dictionnaire dans un .txt : j'obtiens une liste non-rangée entre {}!!! Et quand je l'enregistre dans un .csv j'obtiens un fichier vide!

    As-tu une idée???

Discussions similaires

  1. Recherche et somme de valeurs
    Par NBARAKAT dans le forum Excel
    Réponses: 3
    Dernier message: 28/04/2015, 20h17
  2. Recherche une valeur et récupérer la ligne correspondante.
    Par impur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/07/2010, 13h06
  3. Réponses: 3
    Dernier message: 24/08/2006, 11h56
  4. Somme des valeurs de certaines lignes
    Par Tartenpion dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/02/2006, 16h46
  5. Somme de valeurs d'une colonne d'un DBGrid
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/12/2004, 23h58

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