problème de matrice

Le
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 ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
yves
Le #22452121
Le Sat, 07 Aug 2010 20:29:19 +0200, Baton Rouge a écrit:

Bonjour,

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



En python, le plus naturel dans ce cas, c'est sans doute une liste de
listes (array: pas naturel en Python. Ne fait pas partie du vocabulaire
normal.)

import os
import csv

...couic...

def openRGCfile (RGCfilename):

myarray = [[None]*5]*40000



Inutile de prédimensionner.

Je ferais un truc du genre:

cr = csv.reader(file(RGCfilename), delimiter='t')
maListedeListes = []
for row in cr:
newRow = [row[0],row[1],row[7], row[16],row[17]]
maListedeListes.append(newRow)

print maListedeListes


@+
--
Yves
Baton Rouge
Le #22452151
On 07 Aug 2010 22:25:53 GMT, yves
Le Sat, 07 Aug 2010 20:29:19 +0200, Baton Rouge a écrit:

Bonjour,

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



En python, le plus naturel dans ce cas, c'est sans doute une liste de
listes (array: pas naturel en Python. Ne fait pas partie du vocabulaire
normal.)



pourtant c'est essentiel, sinon il n'y aurai pas numpy.

import os
import csv

...couic...

def openRGCfile (RGCfilename):



myarray = [[None]*5]*40000



Inutile de prédimensionner.

Je ferais un truc du genre:

cr = csv.reader(file(RGCfilename), delimiter='t')
maListedeListes = []
for row in cr:
newRow = [row[0],row[1],row[7], row[16],row[17]]
maListedeListes.append(newRow)

print maListedeListes



Cool car je peux même y acceder individuelement par ligne et par colonne :
print maListedeListes[10000][2]


@+



J'ai contourné juste avant en faisant plusieurs liste mais j'aime pas trop. Ton exemple est bien meilleurs


def openRGCfile (RGCfilename):
myarray0 = []
myarray1 = []
myarray2 = []
myarray3 = []
myarray4 = []

fileRGCopened = open(RGCfilename,"rb")

fichier_csv = csv.reader(fileRGCopened, delimiter='t')
boucle =0

for row in fichier_csv:

myarray0.append(row[0])
myarray1.append(row[1])
myarray2.append(row[7])
myarray3.append(row[16])
myarray4.append(row[17])

boucle = boucle +1

# pour verifier si la liste de la colonne 3 est ok
boucle =0
for list in myarray2:
print myarray2[boucle]
boucle=boucle+1



J'ai passé pas mal de temps dessus aujourd'hui et je suis HS.

Merci de ton aide. Grace à toi je vais pouvoir me coucher.

Me reste à regler le probleme de eclipse qui deconne alors que python en ligne de commande marche sans probleme avec ce script :
An internal error has occurred.
java.lang.ArrayIndexOutOfBoundsException


--
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 ?
Baton Rouge
Le #22452331
On Sun, 08 Aug 2010 01:06:20 +0200, Baton Rouge wrote:

Je ferais un truc du genre:

cr = csv.reader(file(RGCfilename), delimiter='t')
maListedeListes = []
for row in cr:
newRow = [row[0],row[1],row[7], row[16],row[17]]
maListedeListes.append(newRow)

print maListedeListes



Cool car je peux même y acceder individuelement par ligne et par colonne :
print maListedeListes[10000][2]



J'suis ecoeuré tellement c'est simple au vu du temps passé dessus à
consulter les tutos.

Encore merci.
--
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 ?
yves
Le #22452861
Le Sun, 08 Aug 2010 01:06:20 +0200, Baton Rouge a écrit:

Bonjour,

# pour verifier si la liste de la colonne 3 est ok
boucle =0
for list in myarray2:
print myarray2[boucle]
boucle=boucle+1



Quelques remarques:
- il ne faut pas utiliser list comme nom de variable, en effet c'est un
mot réservé de Python.

On s'expose sinon à de beaux bugs bien casse-têtes:

list("mot")






['m', 'o', 't']
list = "coucou"
list("mot")






Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

- pour boucler sur myarray2, pas forcément besoin de compteur:

for elt in myarray2:
print elt

Si elt est lui-même une liste (ou un tuple) à deux éléments:

for elt in myarray2:
un, deux = elt
print deux, un, un, deux

@+
--
Yves
Baton Rouge
Le #22453071
On 08 Aug 2010 12:24:36 GMT, yves
Le Sun, 08 Aug 2010 01:06:20 +0200, Baton Rouge a écrit:

Bonjour,

# pour verifier si la liste de la colonne 3 est ok
boucle =0
for list in myarray2:
print myarray2[boucle]
boucle=boucle+1



Quelques remarques:
- il ne faut pas utiliser list comme nom de variable, en effet c'est un
mot réservé de Python.

On s'expose sinon à de beaux bugs bien casse-têtes:



Je viens d'imprimer les mots reservé.
Donc à l'avenir plus de probleme de ce côté là.

list("mot")






['m', 'o', 't']
list = "coucou"
list("mot")






Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

- pour boucler sur myarray2, pas forcément besoin de compteur:



Au debut boucle etait là pour connaitre le numero d'index dans le for.
Et finalement à force de chercher et modifier il s'est retrouver là.

for elt in myarray2:
print elt

Si elt est lui-même une liste (ou un tuple) à deux éléments:

for elt in myarray2:
un, deux = elt
print deux, un, un, deux

@+



Bon à savoir

merci
--
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 ?
Michel Claveau - MVP
Le #22453351
Bonsoir !

Voilà un exemple simple et rapide, avec les listes en intention :

# -*- coding: utf-8 -*-
import csv

def openRGCfile(RGCfilename):
fileRGCopened = open(RGCfilename,"rb")
cr = csv.reader(fileRGCopened, delimiter='t')
return [[row[0],row[1],row[7],row[16],row[17]] for row in cr]

monarray = openRGCfile("totoRouge.txt")



@-salutations
--
Michel Claveau
Baton Rouge
Le #22453841
On Sun, 08 Aug 2010 20:59:18 +0200, "Michel Claveau -
MVP"
Bonsoir !

Voilà un exemple simple et rapide, avec les listes en intention :

# -*- coding: utf-8 -*-
import csv

def openRGCfile(RGCfilename):
fileRGCopened = open(RGCfilename,"rb")
cr = csv.reader(fileRGCopened, delimiter='t')
return [[row[0],row[1],row[7],row[16],row[17]] for row in cr]

monarray = openRGCfile("totoRouge.txt")



@-salutations



Je vois que tu touches en python.

Même si ça marche, ta ligne "return" me parrait un peu "exotique".
Je prefere developper en general.

De toute façon j'ai dejà mes data dans un xml.

Je suis épaté par la vitesse de lxml par rapport à xml.dom.minidom
C'est au moins 20x plus rapide sur une base comme celle que je
manipule. Je passe de 65 secondes à 3 secondes.
Je comprend pas pourquoi lxml est pas intégré directement à python.

Par contre j'ai pas d'idée sur comme faire des recherche avec lxml sur
les data.
Par exemple comment faire des recherche pour trouver "vacances"



<note>
<to>moi</to>
<from>toi</from>
<heading>mémo</heading>
<body>C'est bientot les vacances</body>
</note>
<note>
<to>lui</to>
<from>elle</from>
<heading>zut</heading>
<body>C'est pas encore noel</body>
</note>

--
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 ?
Mickaël Wolff
Le #22453911
Le 09/08/2010 00:01, Baton Rouge a écrit :

Même si ça marche, ta ligne "return" me parrait un peu "exotique".
Je prefere developper en general.



Ce n'est pas exotique, c'est pythonique. C'est vrai qu'au premier
abord c'est déroutant, mais finalement les ensembles (liste,
générateurs, bientôt dictionnaires) de compréhension c'est très lisible.

Par contre j'ai pas d'idée sur comme faire des recherche avec lxml sur
les data.
Par exemple comment faire des recherche pour trouver "vacances"




from lxml import etree as parser
f = open('notes.xml', 'rb')
try:
p = parser.parse(f)
# search_string contient l'expression xpath qui va bien
p.find(search_string)
except parser.Error as e:
print e


<note>
<to>moi</to>
<from>toi</from>
<heading>mémo</heading>
<body>C'est bientot les vacances</body>
</note>
<note>
<to>lui</to>
<from>elle</from>
<heading>zut</heading>
<body>C'est pas encore noel</body>
</note>




À noter que le fichier XML est mal formé, puisqu'il y a plusieurs
nœuds racines au document.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position
Baton Rouge
Le #22455711
On Mon, 09 Aug 2010 03:23:35 +0100, Mickaël Wolff

Le 09/08/2010 00:01, Baton Rouge a écrit :

Même si ça marche, ta ligne "return" me parrait un peu "exotique".
Je prefere developper en general.



Ce n'est pas exotique, c'est pythonique.



C'est monté python ?
--
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 ?
Baton Rouge
Le #22455701
On Mon, 09 Aug 2010 03:23:35 +0100, Mickaël Wolff

Par contre j'ai pas d'idée sur comme faire des recherche avec lxml sur
les data.
Par exemple comment faire des recherche pour trouver "vacances"




from lxml import etree as parser
f = open('notes.xml', 'rb')
try:
p = parser.parse(f)
# search_string contient l'expression xpath qui va bien
p.find(search_string)
except parser.Error as e:
print e



ok merci, je vais essayer ça.

<note>
<to>moi</to>
<from>toi</from>
<heading>mémo</heading>
<body>C'est bientot les vacances</body>
</note>
<note>
<to>lui</to>
<from>elle</from>
<heading>zut</heading>
<body>C'est pas encore noel</body>
</note>




À noter que le fichier XML est mal formé, puisqu'il y a plusieurs
n½uds racines au document.



c'est un extrait d'un xml.

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 ?




--
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 ?
Publicité
Poster une réponse
Anonyme