OVH Cloud OVH Cloud

problème de matrice

13 réponses
Avatar
Baton Rouge
Bonjour

J'ai un fichier cvs que je charge et sur lequel je dois recuperer une partie des infos : 5 colonne de 40.000 lignes. Il s'agit des colonnes :
(row[0]), (row[1]), (row[7]), (row[16]), (row[17])

Depuis ce matin je me casse la tête pour mettre 5x40.000 données dans une matrice de 5x40.000 cases

Je pense peut etre encore trop en delphi, d'où mon incapacité à trouver la solution.

si quelqu'un peu me mettre sur la piste...


Merci de vos lumieres


import os
import csv

...couic...

def openRGCfile (RGCfilename):
myarray = [[None]*5]*40000

fileRGCopened = open(RGCfilename,"rb")

cr = csv.reader(fileRGCopened, delimiter='\t')
boucle =0
for row in cr:
print (row[0]), (row[1]), (row[7]), (row[16]), (row[17])

myarray[0][boucle]= (row[0])
myarray[1][boucle]= (row[1])
myarray[2][boucle]= (row[7])
myarray[3][boucle]= (row[16])
myarray[4][boucle]= (row[17])

boucle = boucle +1

...couic...

def main():
isRGCfileExist (RGCfilename)
#Ouvre le fichier à traiter
openRGCfile(RGCfilename)

...couic...
--
Travailler plus pour gagner plus pour quoi faire ?
Pour finir par divorcer parce qu'on est pas souvent à la maison ou faire un malaise vagal et creuser le trou de la sécu ?

3 réponses

1 2
Avatar
Mickaël Wolff
Le 09/08/2010 18:23, Baton Rouge a écrit :

c'est un extrait d'un xml.



Ok. Mais le parseur va quand même gueuler sur le fait qu'il y a
plusieurs éléments au lieu d'une racine.


En quoi c'est problematique d'avoir plusieurs noeud racine ?
Si on regarde un noeud racine c'est pas different d'un child et il
peut y avoir plusieurs child dans un noeud racine.
Ai je loupé quelque chose ?



<http://www.w3.org/TR/2008/REC-xml-20081126/#sec-well-formed>

Une racine, sinon ce n'est pas un document XML. Mais c'est HS sur
cette liste.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
cémoi
Le 07/08/2010 20:29, Baton Rouge a écrit :
Bonjour

J'ai un fichier cvs que je charge et sur lequel je dois recuperer une partie des infos : 5 colonne de 40.000 lignes. Il s'agit des colonnes :
(row[0]), (row[1]), (row[7]), (row[16]), (row[17])

Depuis ce matin je me casse la tête pour mettre 5x40.000 données dans une matrice de 5x40.000 cases

Je pense peut etre encore trop en delphi, d'où mon incapacité à trouver la solution.

si quelqu'un peu me mettre sur la piste...


Merci de vos lumieres


import os
import csv

...couic...

def openRGCfile (RGCfilename):
myarray = [[None]*5]*40000




Ici, tu crées une liste de 40000 références sur une unique liste de 5
objets.
Pour t'en assurer, tu peux tenter d'assigner une valeur à un élement de
ta liste et afficher le résultat:

myarray[0][1] = 1
myarray







[[None, 1, None, None, None], [None, 1, None, None, None], [None, 1,
None, None, None], [None, 1, None, None, None], [None, 1, None, None,
None], [None, 1, None, None, None], [None, 1, None, None, None], [None,
1, None, None, None], [None, 1, None, None, None], ....

Il semblerait que 40000 listes aient été mises à jour, mais en fait une
seule a été
modifiée et 40000 références pointent dessus. Une autre méthode
permettant de
vérifier cette interprétatioon est d'appeler la fonction id() sur chaque
élément de la
liste de liste, et chacun pourra vérifier qu'il n'existe que 5 identités
distinctes dans
myarray.


Parfois il est utile de créer une liste de listes en avance de phase tel
que tu avais tenté
de le coder. Une façon élégante à mon sens de le faire est d'utiliser
les listes en intention (ou comprehension lists an anglais):

myarray = [[None for i in xrange(5)] for j in xrange(40000)]







Vérification:

myarray[0][1] = 1
myarray







[[None, 1, None, None, None], [None, None, None, None, None], [None,
None, None, None, None], [None, None, None, None, None], [None, None,
None, None, None], [None, None, None, None, None], [None, None, None,
None, None], [None, None, None, None, None], [None, None, None, None,
None], ...

Seul l'élément à l'indice [0][1] à été modifié, ce qui correspond au
comportement attendu.


En espérant que ça aide,


Laurent


fileRGCopened = open(RGCfilename,"rb")

cr = csv.reader(fileRGCopened, delimiter='t')
boucle =0
for row in cr:
print (row[0]), (row[1]), (row[7]), (row[16]), (row[17])

myarray[0][boucle]= (row[0])
myarray[1][boucle]= (row[1])
myarray[2][boucle]= (row[7])
myarray[3][boucle]= (row[16])
myarray[4][boucle]= (row[17])

boucle = boucle +1

...couic...

def main():
isRGCfileExist (RGCfilename)
#Ouvre le fichier à traiter
openRGCfile(RGCfilename)

...couic...
Avatar
Baton Rouge
On Fri, 13 Aug 2010 21:01:52 +0200, cémoi
wrote:

Seul l'élément à l'indice [0][1] à été modifié, ce qui correspond au
comportement attendu.


En espérant que ça aide,



J'ai deja trouvé la solution, mais je vais garder ça pour la prochaine
fois. càd dans quelques jours pour la suite.

--
Travailler plus pour gagner plus pour quoi faire ?
Pour finir par divorcer parce qu'on est pas souvent à la maison ou faire un malaise vagal et creuser le trou de la sécu ?
1 2