Bonjour,
J'ai un fichier csv du type :
et je souhaiterais ne garder que :Code:
1
2
3
4
5
6
7
8 A;1 A;2 B;1 C;1 D;1 D;2 D;3
D'avance merci pour votre aideCode:
1
2
3
4
5 A;2 B;1 C;1 D;3
Version imprimable
Bonjour,
J'ai un fichier csv du type :
et je souhaiterais ne garder que :Code:
1
2
3
4
5
6
7
8 A;1 A;2 B;1 C;1 D;1 D;2 D;3
D'avance merci pour votre aideCode:
1
2
3
4
5 A;2 B;1 C;1 D;3
je pense que le plus simple est de passer par un dictionnaire
- split la ligne
- on fait ensuite: dico[ligne[0]]=ligne[1]
- tu n'aura plus qu'à récupérer les couples clé/valeur dans l'ordre alphabétique (ou non selon le besoin)
Justement avec un dico il va t'écraser les valeurs précédentes pour la nouvelle et du coup tu n'auras que la dernière (visiblement c'est celle que tu veux).
Bonjour,
On peut lire le fichier comme ça:
Ce qui donnera une liste de listes:Code:
1
2
3
4 with open("toto.csv", 'r') as f: L = [] for ligne in f: L.append(ligne.split(';'))
On peut effectivement utiliser un dictionnaire, mais le dictionnaire ne conservera pas l'ordre des termes (je ne sais pas si c'est important). Alors, on peut utiliser "OrderedDict" du module collections qui, lui, conservera l'ordre:Code:L = [['A',1], ['A',2],['B',1],['C',1],['D',1],['D',2],['D',3]]
Cela suppose tout de même que, dans le fichier csv, pour une même lettre (par exemple 'D'), les nombres associés (1, 2, 3) soient bien dans l'ordre croissant, car ce sera seulement le dernier qui sera mémorisé.Code:
1
2
3
4
5
6 D = OrderedDict() for cle, valeur in L: D[cle] = valeur print D.items() [('A', 2), ('B', 1), ('C', 1), ('D', 3)]
On peut aussi utiliser un dictionnaire comme suit si les valeurs sont rangées de façon anarchique.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 with open("toto.csv", 'r') as f: Dico = {} for ligne in f: lettre, valeur = ligne.split(';') if lettre in Dico: Dico[lettre] = [valeur] else: Dico[lettre] += [valeur] for lettre, valeur in Dico.items(): Dico[lettre] = max(valeur)