liste formatée? - Python - Programmation
Marsh Posté le 14-02-2006 à 17:44:10
...
Tu te rends compte que tu crées un tuple de slices là?
Marsh Posté le 14-02-2006 à 17:47:56
Si cela est une erreur de faire çà, alors je ne le savais pas.
Marsh Posté le 14-02-2006 à 17:53:11
Ben c'est comme tu veux hein, mais la sortie est parfaitement normale pour un tuple de slices, Python fait très précisément ce que tu lui demande là
Marsh Posté le 14-02-2006 à 17:58:07
çà j'avais bien compris. Mais je cherche à trouver un moyen d'avoir cette sortie de maniere formatée (comme je l'ai défini dansma classe dialect).
On va dire que je ne réussis pas à joindre ces tuples à l'écriture que je souhaite.
Si çà peut te consoler.. j'ai très peu d'heures de vol Python dans les pattes.
Marsh Posté le 14-02-2006 à 18:04:00
rules_taff a écrit : Mais je cherche à trouver un moyen d'avoir cette sortie de maniere formatée (comme je l'ai défini dansma classe dialect). |
Ben chais pas, c'est déjà formatté, si le format actuel ne te va pas, tu pourrais la reformatter par exemple
J'vois pas où est le problème, t'as un format A (à la con, si je puis me permettre), tu veux un format B, ben tu transformes de l'un à l'autre
Mais comme à aucun moment tu ne dis quel est le problème et quel est le format de sortie que tu cherches, et que ma boule de crystal est chez le mécano pour la révision des 100,000 ben désolé je peux pas t'aider
Marsh Posté le 14-02-2006 à 18:09:21
je veux que mon résultat soit de la forme:
itemA,itemB,itemC,ItemD,..
itemA2,itemB2,itemC2,ItemD2,..
etc...
et non avec des [], des guillemets, ni des doublequote...
un format csv "valide" dirons-nous.
Mais s'il faut se retaper la sortie je le ferais..
Marsh Posté le 14-02-2006 à 18:12:35
rules_taff a écrit : je veux que mon résultat soit de la forme: |
Ok, alors explique moi pourquoi tu crées un putain de tuple de slices bordel
J'ai l'impression que tu ne comprends même pas ce que tu demandes à Python et que tu t'étonnes qu'il ne fasse pas ce que tu voudrais
La programmation c'est pas magique, le principe c'est pas "tiens j'vais prendre des trucs au pif tout mélanger dans un joyeux bordel et ça va peut-être marcher" bordel
Marsh Posté le 14-02-2006 à 20:19:26
ok, on reprend..
Pour faire simple, je dois récuperer des valeurs qui se trouvent sur une page web, qui se trouve dans un tableau.
J'ai réussi à le faire sans trop de problème.
J'ai mis les valeurs ainsi récupérés dans un fichier CSV. avec 13 items par lignes.
Ce que je souhaites à présent, c'est choisir uniquement 8 items rangés dans un ordre que je définis dans un autre fichier CSV.
C'est à dire:
item1,item2,item3,item4,etc...
avec le tri donne
item8,item2,item13,item5,etc...
Pour répondre à ta question donc, ce putain de tuple de slic est ce que j'ai réussi de mieux pour le moment pour remettre en ordre mes valeurs.
J'ai bien compris, je pense, pour l'instant, pourquoi python me donne ce type de formatage de données.
Mais je ne vois pas encore comment passer de mon fichier1.csv à fichier2.csv.
C'est la méthode je dirais qui me manque. J'ai pas mal cherché sur le net ce qui se rapporte à python et au CSV mais sans trouver comment faire ce joli mélange comme tu dis. Il faut bien comprendre que j'essaye de faire avec ce que j'ai compris. Mais cela ne donne pas le résultat prévu.
Donc c'est sur que c'est facile de critiquer quand on connait.. et que le néophyte s'exprime mal.. Mais j'ai toujours pensé que c'était en faisant des betises qu'on apprenait. Tu ne sembles pas de cet avis. Et je ne t'en veux pas. La prog' ce n'est pas mon dada. Mais j'aimerais bien pouvoir réussir à faire ce dernier bout de code.
voila.
Marsh Posté le 14-02-2006 à 20:23:00
à oui.. voici un lien qui bien qu'il ne donne pas la réponse que j'ai copié, m'a fortement inspiré:
http://www.ebgm.jussieu.fr/~fuchs/python/list.html
Marsh Posté le 14-02-2006 à 22:26:31
rules_taff a écrit : Lais j'ai toujours pensé que c'était en faisant des betises qu'on apprenait. Tu ne sembles pas de cet avis. |
En l'occurence si, c'est quasiment toujours ainsi que je procède, mais je continue jusqu'à avoir résolu mon problème, et j'essaie de connaître mon outil au lieu d'y aller au pifomètre.
Connaître ton outil ici ça veut dire à minima avoir lu le Python Tutorial de Guido van Rossum (le BDFL et créateur de Python), A Byte of Python de Swaroop, Apprendre à programmer avec Python de Swinnen et Dive Into Python de Mark Pilgrim.
Maintenant pour ton problème, si on reprend à 0 tu as une liste de valeurs ordonnées (pour chaque ligne du CSV source) et tu veux en sortir une autre liste de valeurs ordonnées (pour chaque ligne du CSV destination).
Actuellement, tu utilises des slices. Permet moi de te dire que c'est débile, une slice est une partie de liste, une sous liste. En regroupant des slices dans un tuple (qui est en gros une liste ne pouvant pas être modifiée après sa création), tout ce que tu crées c'est une liste de listes, alors que tu veux une liste de valeur. Echec complet.
Donc pour commencer, extrait des valeurs de ta liste initiale e.g. d = i[7], i[1], i[4], i[5], i[2], i[3], i[8], i[12], i[13]
Hop, bravo, tu as un tuple de valeurs, donc une liste de valeurs, 95% du boulot est fait.
Maintenant tu veux formatter tes données en une liste de valeurs séparées par dés virgules.
Les chaînes de caractère (string) ont une méthode "join" permettant de concaténer les valeurs d'une liste en les séparant par le string originel. "".join(l) va concaténer toutes les valeurs contenues dans "l", " ".join(l) va faire de même en séparant les valeurs par un espace, ... et ",".join(l) va renvoyer toutes les valeurs de "l" concaténées dans une chaîne unique et séparées par des virgules.
",".join(d)
fini.
Marsh Posté le 15-02-2006 à 10:51:23
bon bah.. çà ne fonctionne pas.
Je m'explique:
mon fichier CSV de base ne me permet pas de faire çà:
d = i[7], i[1], i[4], i[5], i[2], i[3], i[8], i[12], i[13]
j'ai l'erreur suivante:
IndexError: list index out of range
par contre, si je fais:
print row
ou
d= i[7:8],i[1:2],i[4:6],i[2:4],i[8:9],i[12:14]
la j'ai mes valeurs.
Mon fichier CSV doit etre mal formé. C'est bien çà, j'avais une ligne vide en tout début du fichier CSV
J'ai fais des tests avec un fichier CSV ayant cette forme et là tout focntionne:
1a,1b,1c,1d,1e,1f,1g
2a,2b,2c,2d,2e,2f,2g
3a,3b,3c,3d,3e,3f,3g
4a,4b,4c,4d,4e,4f,4g
Marsh Posté le 15-02-2006 à 11:08:17
rules_taff a écrit : IndexError: list index out of range |
Et ça ne te viendrait bien sûr pas à l'idée de tester la longueur de ta liste ou de l'imprimer pour regarder quelle taille elle a ou comment elle est formattée
Marsh Posté le 15-02-2006 à 11:15:59
ba si puisque c'est comme çà que j'ai trouvé l'erreur...
par contre, l'écriture dans un fichier s'effectue correctement en utilisant:
for i in reader:
d= i[7], i[1], i[4], i[5], i[2], i[3], i[8], i[12]
c.writerow(d)
çà fonctionne!!
Marsh Posté le 15-02-2006 à 11:21:21
masklinn a écrit : Et ça ne te viendrait bien sûr pas à l'idée de tester la longueur de ta liste ou de l'imprimer pour regarder quelle taille elle a ou comment elle est formattée |
mon post a été édité.. mais j'avais oublié de dire que j'avais résolu l'erreur en vérifiant la longueur. Donc Peace and love
Marsh Posté le 14-02-2006 à 17:39:51
salut,
j'essaye de faire un tri dans un fichier CSV avant de l'injecter dans une BDD mysql.
Mon problème est que je ne réussis pas ) produire un fichier qui soit trié.
Je bloque donc au niveau de la boucle de sélection:
je pensais que c.writer(d) récupererait mon tri de facon formaté, mais cela n'est pas le cas:
['itemA'],['itemB'],"['itemC ', itemD']","['itemE', 'itemF']",['itemG'],['itemH']
Anybody à une idée?
merci
Message édité par rules_taff le 14-02-2006 à 17:40:24