Csv sous python

Fermé
Thierry67 - 8 févr. 2015 à 19:06
 Thierry67 - 8 févr. 2015 à 21:07
Bonjour a tous,
Actuellement en classe prépa, je dois écrire un fichier sous python qui exporte les données stockées dans un fichier .dat. dans cedit fichier se trouve 3 colonnes : le temps, et les données avant et après amplification. Mon pb est quer je n'arrive pas a extraire une seule colonne, et donc lui associer un des trois nom.....

Mon script est le suivant :

import csv
import numpy


source=open("donnees_accelerometre.dat","r")
Mesures=source.readlines()
print ("le nombre de mesures est de ")
print(len(Mesures))
source.close()

cr=csv.reader(open("donnees_accelerometre.dat","rb"))

for row in cr:
print row[0]



et je récupère actuellement les données de ce genre :
['7.956000000000000405e+00 1.436388744041320109e+00 3.451886907219889888e+00']
['7.959999999999999964e+00 1.446391450241210075e+00 3.371819943189620084e+00']

(il y en a 2000, je ne les met pas toutes ;) )

Merci de votre aide précieuse, bonne soirée.

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 8/02/2015 à 19:31
'lut, le .dat n'est pas un CSV vu que les valeurs ne sont pas séparées par des virgules mais par des espaces.
En continuant sur ta lancée, il faut lire le fichier ligne par ligne, puis séparer les 3 données en utilisant l'espace comme délimiteur, puis finalement convertir le nombre sous forme de string en vrai nombre (type
float
).

Le reader CSV ne sert donc a rien et fait du boulot en trop, il faut se servir directement du fichier ouvert, qui fait aussi la lecture ligne par ligne:
f = open("donnees_accelerometre.dat","rb")

for row in f:
    # row est notre ligne, on la sépare en 3:
    donnees = row.split(' ')
    # Puis on convertit chaque élément en float correspondant:
    donnees = [float(x) for x in donnees]
À partir de là,
donnees
contiendra
[7.956, 1.43638874404132, 3.45188690721989]
par exemple; fais-en ce que tu souhaites.

Attention aussi: tu utilises Python 2, mais en Python 3 il faut retirer le "b" du mode d'
open
, sinon tu te retrouveras avec des itérateurs
BufferedReader
plutôt que des
string
s.
Aussi, le retour a la ligne vient avec
row
, mais ici ce n'est pas grave.
from human import idiocy
del idiocy
0
Merci beaucoup de votre réponse, je commençait a désespérer.....
Mon problème est en fait de créer une nouvelle colonne nommée temps par exemple, et y insérer toutes les premières valeurs de chaque ligne...
j'ai essayé avec row[indicedelacolone] avec un range qui parcourt la liste entière mais il me sort toute la liste...
Merci encore mille fois !!!!
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
8 févr. 2015 à 20:11
J'ai reparcouru la doc du reader/writr CSV de Python, il est possible de s'en servir avec un séparateur personnalisé, via le paramètre
delimiter
de son constructeur.
Si tu comptes faire l'écriture de données, tu peux conserver ta méthode, elle te mettra a disposition la lecture et l'écriture simplifiée de tes "SSV" (space separated values).
0
Ok merci beaucoup de votre aide !!
0