importation fichier > tableau dans python

importation fichier > tableau dans python - Python - Programmation

Marsh Posté le 16-07-2008 à 16:45:30    

Bonjour,
 
J'ai des tableaux de doubles stockés dans des fichiers textes (séparés par des \t)
 
je voudrais importer cela sous forme de tableaux dans python, ou alors pouvoir me déplacer en 2d dans mon fichier pour faire des tests et extraire a la demande certaines données.
 
Cela est il possible aisément?  
 
Pour ma part je n'ai trouvé que comment extraire des lignes entieres sous formes de liste, ou sinon c'est élément par élément, long et surtout ca me parait complexe vu que mon tableau n'est pas rectangulaire (non non) donc pour se déplacer en 2d aie....
 
J'ai entendu parler d'une librairie csv, qqun sait si ca s'adapte a des fichiers qui sont tabulation-separated?  
 
Merci!

Reply

Marsh Posté le 16-07-2008 à 16:45:30   

Reply

Marsh Posté le 16-07-2008 à 17:20:52    

en bidouillant (j'isole la colonne, puis la ligne et ca me donne l'élément voulu) mais je l'ai sous forme d'un string, avec en plus un séparateur de ligne a la fin. Comment retrouver un double? Il faut se taper de parcourir mon string jusqu'au caractere de fin de ligne, puis de transformer le reste en double? Et meme comment faire ca? J'ai rien trouvé dans le tuto de gerard swinnen.
 
Perl n'est il pas plus adapté pour ce que je veux faire?
 
merci

Reply

Marsh Posté le 16-07-2008 à 17:21:17    

(je lance un peu un troll avec ma question sur perl, non?)

Reply

Marsh Posté le 16-07-2008 à 20:29:27    

Le module csv fait partie de la lib standard python, il aurait été de bon ton d'aller voir dedans; oui ça s'adapte; float; peut-être


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

Marsh Posté le 17-07-2008 à 10:12:52    

J'ai suivi le tutoriel
http://www.commentcamarche.net/faq [...] chiers-csv
 
en recopiant exactement le court programme, ca a l'air de fonctionner (le fichier est bien créé)
 
par contre a la lecture, rien ne s'affiche dans mon terminal.
 
voici mon code:

Code :
  1. import csv
  2. Writer = csv.writer(open('test', 'w'), delimiter='\t')
  3. Writer.writerow(['truc'] * 5 + ['machin'])
  4. Writer.writerow(['truc2'] * 5 + ['machin 2'])
  5. Writer.writerow(['truc3'] * 5 + ['machin 3'])
  6. REader = csv.reader(open('test', 'r'), delimiter='\t')
  7. for row in REader:
  8. print row


 
 
j'ai aussi essayé de printer row[1] mais rien non plus (meme pas de message d'erreur)
une idée?


Message édité par tapiwa le 17-07-2008 à 11:25:25
Reply

Marsh Posté le 17-07-2008 à 11:28:53    

visiblement on ne peut pas ecrire puis lire dans un meme fichier. je cherche une instruction de fermeture de l'écriture du fichier....

Reply

Marsh Posté le 17-07-2008 à 14:57:41    

Faut que tu flush ou que tu fermes ton fichier après avoir écrit dedans.
 
Et pour manipuler des fichiers, il suffit d'aller voir dans la doc, c'est quand même pas sorcier ...
http://docs.python.org/dev/library [...] le-objects

Reply

Marsh Posté le 17-07-2008 à 15:18:42    

Merci de ton aide
je connais file.close()
Seuleument, dans le cas présent ca ne marche pas (peut etre parceque je l'ai ouvert avec le module csv)

 

Tout n'est pas forcément évident pour tout le monde. Bien sur en lisant toute la doc on sait tout faire. Mais alors ce forum ne sert plus a grand chose


Message édité par tapiwa le 17-07-2008 à 15:19:22
Reply

Marsh Posté le 17-07-2008 à 15:20:18    

tapiwa a écrit :

Seuleument, dans le cas présent ca ne marche pas (peut etre parceque je l'ai ouvert avec le module csv)


Tu peux être plus précis ?


Message édité par multani le 17-07-2008 à 15:20:26
Reply

Marsh Posté le 17-07-2008 à 15:23:26    

pour etre tres precis, et cohérent avec mon code posté ci dessus, je fais REader.close()
et j'obtiens le message d'erreur suivant:
'Attribute Error': _csv.reader object has no attribute close

Reply

Marsh Posté le 17-07-2008 à 15:23:26   

Reply

Marsh Posté le 17-07-2008 à 15:33:42    

ok, j'ai compris
 
Alors il faut d'abord ouvrir le fichier de maniere classique
 
fichier = open('file.csv','rb')
 
puis l'ouvrir avec le module csv
 
fichiercsv = csv.reader(fichier, delimiter=';')
 
et ainsi on peut fermer le fichier 'fichier' avec fichier.close(), ca fonctionne.
 
Par contre je me demande si on ne pourrait pas aussi liberer de la mémoire en supprimant le fichier csv?
 
Merci

Reply

Marsh Posté le 17-07-2008 à 15:38:51    

Euh ben ouais [:pingouino]
 
Déjà c'est ton fichier ouvert en lecture que t'essayes de fermer, alors que c'est celui dans lequel t'écris dedans qu'il faudrait fermer.
 
Ensuite, comme le message d'erreur te le dit, un objet csv_reader (ou csv_writer) n'a pas d'attribut/méthode "close".
C'est le fichier que tu passes à csv.writer qu'il faut que tu fermes.
 
Sauf que la, tu le manipules pas directement, vu que tu passes directement le résultat d'"open()" à csv.writer.
Donc, stocke le résultat d'open dans une variable, tu la passes à writer et tu le fermes ensuite.
 
Edit: burned. Comme quoi ...
 

tapiwa a écrit :

Par contre je me demande si on ne pourrait pas aussi liberer de la mémoire en supprimant le fichier csv?


Quelle mémoire ?


Message édité par multani le 17-07-2008 à 15:40:20
Reply

Marsh Posté le 17-07-2008 à 16:53:12    

En fait j'ouvre de tres nombreux fichier aussi en lecture, donc il me faut les refermer au fur et a mesure, sinon je vois que mon programme s'alourdit de plus en plus et il avance de moins en moins vite. Donc j'en ai conclu que je saturais une mémoire a force d'ouvrir plein de fichier comme ca (ce sont de tres gros fichiers (genre la taille max d'excel 2003 dans les deux sens) et comme j'en ouvre quelques centaines...
 
Ca doit etre dans la ram que ca se case.

Reply

Marsh Posté le 23-07-2008 à 02:11:30    

tant que tu appelles pas une fonction de type readlines(), ton fichier ouvert c'est juste un descripteur, c'est pas avec ça que tu vas saturer ta ram.

Reply

Sujets relatifs:

Leave a Replay

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