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.