Salut,
Je débute en Python et je cherche à extraire certaines colonnes d'un fichier csv.
Est-ce que quelqu'un pourrait m'aider ?
Merci d'avance !
Version imprimable
Salut,
Je débute en Python et je cherche à extraire certaines colonnes d'un fichier csv.
Est-ce que quelqu'un pourrait m'aider ?
Merci d'avance !
Que n'as-tu pas compris dans la documentation du module csv ?
J'ai bien vu la fonction writerow mais elle sert à écrire des lignes et non des colonnes, c'est bien ça ?
Bonjour,
Quand on lit un fichier csv avec le module csv, on récupère une "liste de listes" dans laquelle chaque sous-liste est une ligne avec tous les champs (les colonnes) séparées par une virgule. Il est alors facile d'en extraire une des colonnes.
Exemple:
Extraction de la 3ème colonne (indice 2):Code:malistecsv = [["col00", "col01", "col02", "col03", "col04"], ["col10", "col11", "col12", "col13", "col14"], ["col20", "col21", "col22", "col23", "col24"]]
Code:
1
2 print([ligne[2] for ligne in malistecsv]) ['col02', 'col12', 'col22']
Je suis sûre d'avoir tout compris à la réponse que tu as écrite :)
Je vais être plus précise. J'ai un fichier avec 2 colonnes Time et Values pour simplifier et je ne veux qu'écrire que la première colonne Time dans mon fichier de sortie. J'ai tenté de coder ça de cette façon, mais mon fichier de sortie est toujours vide :
Une idée de comment améliorer mon code ?Code:
1
2
3
4
5
6
7
8 fieldnames = ['Time', 'Value'] my_writer = csv.DictWriter(out_file, delimiter = ',', fieldnames = fieldnames) my_reader = csv.DictReader(zephir_file, delimiter = ',') for i in my_reader: if i == 0: my_writer.writerow(i)
Bonjour,
Quand un truc ne marche pas, il est souvent intéressant de créer un exemple complet en dehors du programme lui-même sur lequel on peut tester des solutions.
Prenons un fichier csv appelé table01.csv qui contient:
Tu as utilisé dans ton code les méthodes DictReader et DictWriter qui passent par l'intermédiaire d'un dictionnaire, mais je n'en vois pas l'intérêt: ça ajoute, à mon avis, une complexité inutile.Code:
1
2
3
4 "titre1";"titre2";"titre3";"titre4";"titre5" "col00";"col01";"col02";"col03";"col04" "col10";"col11";"col12";"col13";"col14" "col20";"col21";"col22";"col23";"col24"
Voilà ce que je propose (Python 3):
Cela donne un fichier table02.csv qui contient maintenant:Code:
1
2
3
4
5
6
7
8 import csv with open("table01.csv", "r") as fsrce: with open("table02.csv", "w", newline='') as fdest: my_reader = csv.reader(fsrce, delimiter = ';') my_writer = csv.writer(fdest, delimiter = ';') for ligne in my_reader: # ligne est une liste de valeurs de colonnes my_writer.writerow([ligne[0]]) # ligne[0] est la valeur de la 1ère colonne de la ligne considéré
Est-ce le résultat attendu?Code:
1
2
3
4 titre1 col00 col10 col20
Si c'est le cas, on peut simplifier: utiliser simplement fdest.write() au lieu de my_writer.writerow(). Cela donnerait:
Code:
1
2
3
4
5
6
7 import csv with open("table01.csv", "r") as fsrce: with open("table02.csv", "w") as fdest: my_reader = csv.reader(fsrce, delimiter = ';') for ligne in my_reader: fdest.write(ligne[0] + '\n')
Merci beaucoup c'est exactement le résultat attendu !