Tri tableau csv
Résolu/Fermé
Louna
-
Modifié le 24 mars 2020 à 10:24
mamiemando Messages postés 33553 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 mars 2025 - 26 mars 2020 à 11:19
mamiemando Messages postés 33553 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 mars 2025 - 26 mars 2020 à 11:19
A voir également:
- Trier un fichier csv
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Excel trier par ordre croissant chiffre - Guide
- Ouvrir un fichier .bin - Guide
2 réponses
mamiemando
Messages postés
33553
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 mars 2025
7 830
Modifié le 24 mars 2020 à 10:29
Modifié le 24 mars 2020 à 10:29
Bonjour,
Peux-tu donner les premières lignes du fichier
Bonne chance
Peux-tu donner les premières lignes du fichier
csv(voire le fichier complet s'il n'est pas trop long) ainsi que le message erreur complet ? Par ailleurs
pandasme paraît un peu surdimensionné si c'est ton seul besoin.
- Si tu veux juste trier ce fichier, et rien d'autre, tu peux importer le fichier dans un tableur (e.g. libreoffice calc et faire le tri),
- Si tu veux récupérer ses données triées en python, tu peux charger le fichier avec le module python
csv
puis trier la structure de données que tu auras remplie lors de la lecture du fichier avecsorted
.
Bonne chance
mamiemando
Messages postés
33553
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 mars 2025
7 830
Modifié le 25 mars 2020 à 23:08
Modifié le 25 mars 2020 à 23:08
Bonjour,
Comme dit précédemment, pandas est overkill et voici comment tu peux faire avec
Ce qui donne à l'exécution :
Bonne chance
Comme dit précédemment, pandas est overkill et voici comment tu peux faire avec
csv.
import csv, io, sys from operator import itemgetter def sort_csv(stream, key=itemgetter(0), input_delimiter=";", output_delimiter="\t"): rows = [row for row in csv.reader(stream, delimiter=input_delimiter)] header = rows[0] rows = rows[1:] rows = sorted(rows, key=key) ret = "\n".join([ output_delimiter.join(header), "\n".join([ output_delimiter.join(row) for row in rows ]) ]) return ret # Avec une chaîne DATA = """Date;Code INSEE région;TMin (°C);TMax (°C);TMoy (°C) 2017-01-13;52;2.75;9.4;6.08 2017-02-07;52;6.0;12.75;9.38 2017-10-01;52;14.25;18.25;16.25 2017-10-09;52;11.25;17.55;14.4 2017-10-17;52;10.25;24.0;17.12 2017-05-19;52;6.45;15.45;10.95 2017-08-30;52;14.75;19.15;16.95 2017-09-03;52;10.5;19.0;14.75 2017-09-08;52;14.0;19.7;16.85 2017-09-12;52;10.3;19.85;15.08 2017-12-05;52;4.55;9.15;6.85 2017-01-07;52;-4.8;4.3;-0.25 2017-11-27;52;0.55;12.15;6.35""" # Tri sur la colonne 0, délimiteur d'entrée ";", délimiteur de sortie "\t" print("Version avec une chaîne") STREAM = io.StringIO(DATA) print(sort_csv(STREAM)) # Tri sur la colonne 2. Comme ce sont des entiers on ne veut pas trier selon # l'ordre lexicographique et on ne peut donc pas utiliser itemgetter(2) print("Tri selon la colonne 2") STREAM = io.StringIO(DATA) print(sort_csv(STREAM, key=lambda row: float(row[2]))) # Avec un fichier try: with open("toto.csv") as f: print(sort_csv(f)) except Exception as e: print(e, file=sys.stderr)
Ce qui donne à l'exécution :
Version avec une chaîne
Date;Code INSEE région;TMin (°C);TMax (°C);TMoy (°C)
2017-01-07;52;-4.8;4.3;-0.25
2017-01-13;52;2.75;9.4;6.08
2017-02-07;52;6.0;12.75;9.38
2017-05-19;52;6.45;15.45;10.95
2017-08-30;52;14.75;19.15;16.95
2017-09-03;52;10.5;19.0;14.75
2017-09-08;52;14.0;19.7;16.85
2017-09-12;52;10.3;19.85;15.08
2017-10-01;52;14.25;18.25;16.25
2017-10-09;52;11.25;17.55;14.4
2017-10-17;52;10.25;24.0;17.12
2017-11-27;52;0.55;12.15;6.35
2017-12-05;52;4.55;9.15;6.85
Tri selon la colonne 2
Date;Code INSEE région;TMin (°C);TMax (°C);TMoy (°C)
2017-01-07;52;-4.8;4.3;-0.25
2017-11-27;52;0.55;12.15;6.35
2017-01-13;52;2.75;9.4;6.08
2017-12-05;52;4.55;9.15;6.85
2017-02-07;52;6.0;12.75;9.38
2017-05-19;52;6.45;15.45;10.95
2017-10-17;52;10.25;24.0;17.12
2017-09-12;52;10.3;19.85;15.08
2017-09-03;52;10.5;19.0;14.75
2017-10-09;52;11.25;17.55;14.4
2017-09-08;52;14.0;19.7;16.85
2017-10-01;52;14.25;18.25;16.25
2017-08-30;52;14.75;19.15;16.95
Bonne chance
mamiemando
Messages postés
33553
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 mars 2025
7 830
26 mars 2020 à 11:19
26 mars 2020 à 11:19
De rien, bonne continuation :-)
Modifié le 26 mars 2020 à 11:20
Voici les premières lignes de mon fichier .csv (il compte 1080 lignes)
Et voilà le message affiché:
Merci de votre aide