Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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 ?

10 réponses

1 2
Avatar
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.)

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
Avatar
Baton Rouge
On 07 Aug 2010 22:25:53 GMT, yves wrote:

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 ?
Avatar
Baton Rouge
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 ?
Avatar
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:

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
Avatar
Baton Rouge
On 08 Aug 2010 12:24:36 GMT, yves wrote:

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 ?
Avatar
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
--
Michel Claveau
Avatar
Baton Rouge
On Sun, 08 Aug 2010 20:59:18 +0200, "Michel Claveau -
MVP" wrote:

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 ?
Avatar
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 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"



<http://codespeak.net/lxml/tutorial.html#parsing-from-strings-and-files>

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 <http://lupusmic.org/pro/>
Avatar
Baton Rouge
On Mon, 09 Aug 2010 03:23:35 +0100, Mickaël Wolff
wrote:

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 ?
Avatar
Baton Rouge
On Mon, 09 Aug 2010 03:23:35 +0100, Mickaël Wolff
wrote:

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"



<http://codespeak.net/lxml/tutorial.html#parsing-from-strings-and-files>

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 ?
1 2