Afficher une entrée depuis un csv

Afficher une entrée depuis un csv - Python - Programmation

Marsh Posté le 15-09-2006 à 21:37:02    

Salut. Déjà je m' escuse si ma question vous parait un petit peu débile  :jap:  
Donc voilà, j' ai un fichier csv :  

Citation :

Nom1,Adresse1,Téléphone1,Fax1,Courriel1,Autres1
Nom2,Adresse2,Téléphone2,Fax2,Courriel2,Autres2
Nom3,Adresse3,Téléphone3,Fax3,Courriel3,Autres3


Comment faire pour afficher qu' une seule entrée ? Ex : Adresse2.
 
Ce que je fais moi c' est :  

Code :
  1. reader = csv.reader(file("Monfichier.csv" ))
  2. for row in reader:
  3. print row[1]


Mais biensûr celà affiche :

Citation :

Adresse1
Adresse2
Adresse3

Reply

Marsh Posté le 15-09-2006 à 21:37:02   

Reply

Marsh Posté le 16-09-2006 à 12:12:01    

Tu peux stocker les "row" dans une liste, et puis après tu appelles la liste avec l'index qui va bien

Reply

Marsh Posté le 16-09-2006 à 14:41:36    

Justement j' avais penser à ça, mais je ne sais pas comment faire....
J' ai testé :

Code :
  1. reader = csv.reader(file("Monfichier.csv" ))
  2. for row in reader:
  3.     li = []
  4. li.append(row[1])
  5. print li


J' obtiens :

Citation :

['Adresse1']
['Adresse2']
['Adresse3']


 
Si je mets

Code :
  1. print li[0]

alors j' obtiens la même chose que row[1]

Reply

Marsh Posté le 16-09-2006 à 15:30:13    

ahem ..... à chaque passage dans ta boucle tu écrases ta liste
 
essaye ça
 

Code :
  1. reader = csv.reader(file("Monfichier.csv" ))
  2. li = []
  3. for row in reader:
  4.     li.append(row)
  5. print li[0] # pour voir la liste 0
  6. print li[0][1] # pour voir un élément de la liste


Reply

Marsh Posté le 16-09-2006 à 17:54:02    

1. le reader CSV est un itérateur pour ne pas avoir à charger tout le fichier en mémoire en un coup, c'est pas nécessairement une bonne idée d'essayer de passer outre
2. Pour construire une liste à partir d'un itérateur, il suffit d'envoyer cet itérateur à `list`
 
Donc si tu veux une liste de toutes tes lignes (une liste de listes, donc) il suffit d'appeler list(reader)
 
Démo:
 

~$ cat > test.csv
Nom1,Adresse1,Téléphone1,Fax1,Courriel1,Autres1
Nom2,Adresse2,Téléphone2,Fax2,Courriel2,Autres2
Nom3,Adresse3,Téléphone3,Fax3,Courriel3,Autres3
 
~$ python
Python 2.4.3 (#2, Apr 27 2006, 14:43:58)
[GCC 4.0.3 (Ubuntu 4.0.3-1ubuntu5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.


Code :
  1. >>> import csv
  2. >>> reader = csv.reader(file("test.csv" ))
  3. >>> datalist = list(reader)
  4. >>> datalist
  5. [['Nom1', 'Adresse1', 'T\xc3\xa9l\xc3\xa9phone1', 'Fax1', 'Courriel1', 'Autres1' ], ['Nom2', 'Adresse2', 'T\xc3\xa9l\xc3\xa9phone2', 'Fax2', 'Courriel2', 'Autres 2'], ['Nom3', 'Adresse3', 'T\xc3\xa9l\xc3\xa9phone3', 'Fax3', 'Courriel3', 'Autr es3']]
  6. >>> datalist[1]
  7. ['Nom2', 'Adresse2', 'T\xc3\xa9l\xc3\xa9phone2', 'Fax2', 'Courriel2', 'Autres2']
  8. >>> datalist[1][1]
  9. 'Adresse2'
  10. >>>


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-09-2006 à 11:18:08    

Je savais bien qu'il y avait un moyen beaucoup plus compact !  :whistle:

Reply

Marsh Posté le 17-09-2006 à 11:36:58    

L'avantage c'est surtout que ça passe par les builtins (écris en C) pour traverser l'itérateur et construire la liste, donc c'est probablement un ordre de grandeur plus rapide ;)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-09-2006 à 11:43:46    

en parlant de ce type d'itérateur, c'est compliqué d'en écrire un en python ? (je suis en train de voir comment je peux faire pour écrire un module pour exploiter les fichiers xbase )

Reply

Marsh Posté le 17-09-2006 à 12:20:14    

Non, c'est trivial d'écrire des itérateurs en Python, soit via un "vrai" itérateur (voir `iterator types` dans la doc, et la PEP 234) depuis Python 2.2 si tu as des besoins relativement complexes, soit via les beaucoup plus simples generateurs (voir `generator` dans la doc, et la PEP 255).
 
Le seul inconvénient que je voie aux générateurs, c'est qu'il faut impérativement Python 2.3, les itérateurs sont dispos à partir de Python 2.2
 
Autant dire que ce n'est pas un gros inconvénient.


Message édité par masklinn le 17-09-2006 à 12:27:02

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-09-2006 à 12:25:56    

je te remercie

Reply

Marsh Posté le 17-09-2006 à 12:25:56   

Reply

Marsh Posté le 17-09-2006 à 12:27:39    

J'ai édité mon post au sujet des itérateurs :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-09-2006 à 20:45:38    

Merci beaucoup pour vos réponses. Ca marche nickel ;-)

Reply

Marsh Posté le 17-09-2006 à 23:38:25    

Petite question bonus  :whistle:  
 
Comment fait-on pour supprimer dans le fichier, la donnée affichée ?
J'affiche Adresse2. Ensuite je veux supprimer Adresse2 de mon fichier. Je me dis "Facile ! Il suffit de faire del(datalist[1][1])". Ce qui me donne :

Code :
  1. >>>del(datalist[1][1])
  2. >>>print dataliste[1]
  3. ['Nom2', 'T\xc3\xa9l\xc3\xa9phone2', 'Fax2', 'Courriel2', 'Autres2']


Pourtant lorsque j'ouvre mon fichier Monfichier.csv, Adresse2 est toujours présent ? En fait ça ne m'etonne qu' à moitié car contrairement à un fichier normal, à aucun moment je dis d'ouvrir le csv que ce soit en r, a ou en w ....

Reply

Marsh Posté le 17-09-2006 à 23:43:36    

csv.writer, regarde la doc.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-09-2006 à 21:37:23    

J'ai regardé la doc et même sur le net, mais je ne comprends pas trop...  
Supprimer n'existe pas en tant que tel, il faut que je recopie mon fichier sauf la ligne voulue ? Mais ça me parait un peu lourd.

Reply

Marsh Posté le 18-09-2006 à 23:08:58    

nicko_510 a écrit :

J'ai regardé la doc et même sur le net, mais je ne comprends pas trop...  
Supprimer n'existe pas en tant que tel, il faut que je recopie mon fichier sauf la ligne voulue ?


gagné


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed