Re: besoin d'aide pour bach ou autre

Page principale

Répondre à ce message
Auteur: jl
Date:  
À: guilde
Sujet: Re: besoin d'aide pour bach ou autre
Le vendredi 10 avril 2020 à 21:12 +0200, Jérôme Kieffer a écrit :
Bonjour Anne,
La solution de Jérome est chouette, je me permets de rajouter les commentaires
pour détailler un peu le raisonnement.

> En Python:
> ```
> #!/usr/bin/python3
> import sys
>

# On va ouvrir le fichier dont le nom est passé en argument avec
# les droits en lecture
> with open(sys.argv[1], "rt") as f:

      # On range dans une liste chaque ligne du fichier, après avoir enlevé
      # les caractères de retour à la ligne et les espaces en début de ligne

>     raw = [i.strip() for i in f.readlines()]

>

# On crée un dictionnaire 'count'
> count = {}
> for line in raw:

      # on fait une liste de mot en se servant de ";" comme séparateur

>     words = line.split(";")

      # Si la liste n'a qu'un ou zéro élément on passe juste à la suite

>     if len(words)<2:
>         continue

      # C'est ce passage que j'aime bien : les dictionnaires sont super
      # pratiques pour compter des trucs !
      # On utilise les choses qu'on compte en clef.
      # Retrouver une clef dans un dict est très rapide, donc :

>     second = words[1]

      # Si la clef est déjà présente on rajoute 1 au compteur

>     if second in count:
>         count[second] += 1

      # Sinon on crée un couple clef valeur (avec valeur = 1 comme on
      # croise la clef pour la première fois)

>     else:
>         count[second] = 1

      # reste à imprimer la liste originale en y ajoutant le résultat
      # du comptage

> for line in raw:
>     words = line.split(";")
>     if len(words)<2:
>         print(line)
>     else:
>         print(line+";"+str(count[words[1]]))

>
> ```
>


Et merci à Jérôme au passage pour m'avoir rappelé l'existence de strip() : le
script que j'étais en train d'écrire au brouillon pendant que sa réponse partait
déjà comptait les valeurs avec de vilains \n à la fin :-)

Bon week-end à toutes et tous,

--
Jean-Loup

PS: je n'ai pas encore trop idée du niveau général en programmation des gens sur
la liste, si un message comme ça fait plus de bruit que de signal dites-moi.