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 :

Somme de valeurs pour conditions identiques


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut Somme de valeurs pour conditions identiques
    Bonjour,

    J'ai un fichier texte de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    450 : 12151
    450 : 564561
    650 : 565664
    550 : 65656
    650 : 4646
    500 : 46646
    Je voudrais faire la somme des valeurs pour des conditions identiques.
    C'est-à-dire faire :
    450 : 12151 + 564561
    650 : 565664 + 4646
    etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    somme = open('somme.txt', 'r')
    somme = somme.read()
     
    Array = np.genfromtxt(StringIO(somme), 'string', delimiter=' ')
    J'ai converti mon fichier texte en Array.
    Mais je vois pas trop quelle boucle utiliser pour la suite.
    Si quelqu'un peut me mettre sur la piste...

    Merci.

  2. #2
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    pourquoi n'utilises-tu pas un dictionnaire dont les clés seraient tes "valeurs liens" et les valeurs, les sommes des deuxièmes nombres de chaque ligne, construites au fur et à mesure de la lecture des lignes ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut
    Je ne sais pas quel est le nombre de lignes du/des fichiers à parcourir mais ...
    Il est souvent préférable de processer un fichier à la volée plutôt que de charger tout le fichier puis de le processer ; ça évite d'avoir des problèmes si le fichier d'entrée est gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import collections
     
    count_map = collections.Counter() # ou collections.defaultdict(lambda:0) 
    # on utilise Counter/defaultdict(lambda:0) car qd la clé n'est pas trouvé dans count_map, il renvoie 0
     
    with open('somme.txt') as file:
        # on processe les lignes du fichier au fil de la lecture
        for line in file: 
            # on parse la ligne, parse() à définir
            key, value = parse(line)
            # on met à jour le dictionnaire en conséquence
            count_map[key] += value
    print dict(count_map)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut
    Citation Envoyé par ZZelle Voir le message
    Je ne sais pas quel est le nombre de lignes du/des fichiers à parcourir mais ...
    Il est souvent préférable de processer un fichier à la volée plutôt que de charger tout le fichier puis de le processer ; ça évite d'avoir des problèmes si le fichier d'entrée est gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import collections
     
    count_map = collections.Counter() # ou collections.defaultdict(lambda:0) 
    # on utilise Counter/defaultdict(lambda:0) car qd la clé n'est pas trouvé dans count_map, il renvoie 0
     
    with open('somme.txt') as file:
        # on processe les lignes du fichier au fil de la lecture
        for line in file: 
            # on parse la ligne, parse() à définir
            key, value = parse(line)
            # on met à jour le dictionnaire en conséquence
            count_map[key] += value
    print dict(count_map)
    J'ai pas trop compris ce que c'était que parse...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut
    Citation Envoyé par haraigo Voir le message
    J'ai pas trop compris ce que c'était que parse...
    Ce qui reste à coder .

    parse() prend en entrée une ligne et en extrait les 2 entiers:
    par exemple parse('123 : 456\n') renvoie le tuplet d'entiers (123, 456)

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 : 4 062
    Par défaut
    On pourrait pour un gros fichier utiliser mmap

    Array = np.genfromtxt(StringIO(somme), 'string', delimiter=' ')
    Je suis curieux de savoir sous quelle forme est renvoyé Array (en passant le minimum était de renvoyer le résultat)

    Un conseil supplémentaire parmi les autres déjà présents, est d'analyser une ligne de votre fichier texte.

    Pour ouvrir un fichier

    +1 pour ZZelle, prenez les bonnes habitudes with open c'est le bien.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut
    Bon j'y arrive pas.
    C'est trop compliqué pour un débutant comme moi...

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

Discussions similaires

  1. [XL-2010] Somme de valeurs sous condition. SOMMEPROD ou INDEX ?
    Par Nessie37 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 03/03/2014, 23h45
  2. [XL-2010] Somme de valeur suivant condition sur cellule
    Par EricBOG dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/07/2013, 11h30
  3. Somme des valeurs sous condition
    Par ons1402 dans le forum Excel
    Réponses: 6
    Dernier message: 13/09/2012, 13h40
  4. [XL-2000] Somme de valeurs si condition
    Par DamKre dans le forum Excel
    Réponses: 4
    Dernier message: 15/11/2009, 15h58
  5. [XSLT] Faire la somme d'une valeur pour un ensemble de noeuds
    Par thierry_b dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 10/03/2009, 09h45

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