Extraire les valeurs d'un fichier CSV [Résolu]

Bonjour à tous,
J’ai un fichier d’acquisition (date heure, température, compteurs d’énergie, écarts de temps) dans un format csv.
Je veux tracer ces valeurs sur un même graphe mais il faut extraire les valeurs du fichier.
J’avais commencé en recherchant le séparateur (point virgule) et en découpant le string (:joy:) puis aller au suivant … mais dans une fonction appelée sur interrupt, ce n’est pas ce qu’il y a de mieux.
Les explications sur l’utilisation des formats ne m’ont apporté qu’un gros mal de tête !

Bien entendu, les données ne sont pas de longueur fixes sauf date et heure :
Date - heure; 5.125; 332; 260; 75; 82 (cr/lf)
Date - heure; -2.10; 50; 110; 120; 103 (cr/lf)

Existe t-il une bibliothèque qui prenne le string et renvoie les valeurs dans une ou plusieurs variables.

Merci de vos propositions.
Bernard

Bonjour,

Oui ça existe pour pleins de langages différents.
Quel est le langage utilisé ?

A+

Bonsoir Jelopo,
Merci de prendre en compte ma demande.
Je développe avec Python3.5.
A bientôt

Bonjour,

Il existe donc la bibliothèque ‹ csv › native (en tout cas, elle est installée dans mon Python3.5)

Bonne lecture.

EDIT: Une fois les données récupérées, pour les valeurs numériques, transformer le string en int

val=int(val)

A+

Merci bien pour ton aide.
Je me plonge dans la doc et je te tiens au courant.
A+

Bonsoir a tous
Malgré l’aide de Jelopo, je ne m’en sort pas.
La lirairie csv est trop lourde, aussi j’ai essayé l’instruction split
op=open(« PAC_data »,« r »)
for line in op:
my_string = line.split(";")
print (my_string) # OK
for (« date », temp, … 8 paramètres) in my_string: # error
-----

A l’execution de for(« date », temp … je récupère : Value error : too many values to unpack (expected 8). J’ai essayé avec moins de paramètres(2) , la valeur expected diminue mais j’ai le même message.

deuxième pb : comment stocker dans une matrice à 8 colonnes 150 lignes max ces valeurs ?
quand le premier pb sera solutionné bien sur
Merci pour l’aide que vous m’apporterez.
Bernard

Bonjour,

qu’est ce que ça signife ? ça prend trop de mémoire en machine, ou c’est trop compliqué à utiliser ?

Je part du principe que si une bibilothèque existe, c’est qu’elle peut nous aider.

Pour le reste merci de mettre un bout du fichier de données ainsi que le début de programme entre les balises code « </> » pour que nous puissions reproduire le problème.

Dans mon cas, après sans doute un mauvais copié collé, la commande « print (my_string) » ne passe déjà pas !

Autres remarques:

  • j’ai pour habitude d’utiliser « readline » et « readlines » pour lire un fichier.
  • Il y risque de confusion, « my_string » n’est pas une string mais une liste (c’est juste un problème de nommage, mais ça peut mettre en confusion)
  • du coup l’extraction de "for (date…) est traité un peu comme ci c’était un string et c’est une liste qu’il faut traiter.

Je pense qu’il faut reprendre les concepts de liste et de dictionnaire Python. C’est aussi probablement avec ces concepts que l’on pourra répondre au second problème.

Pour info, je viens de rechercher et trouver un bout de programme que j’avais écrit en 2011 et qui reprenait un peu le même principe. Voici la fonction qui lisait le fichier fic et envoyait les données dans un un dictionnaire.

def readlst(fic):
 dic={}
 while 1:
     line = fic.readline()
     if line == '':
        break
     enreg = line.split(";")
     #print enreg
     id = enreg[0]
     nom = enreg[1]
     prenom = enreg[2]
     dic[id]=nom + " " + prenom
 return dic

N.B: Je ne prétend pas avoir écrit du code propre, j’en était à mes début en Python, et j’ai très peu évolué depuis…

A+

Bonsoir Jelopo,
Je regrette de t’avoir indisposé par ma réponse, mais moi aussi je débute avec Python.
J’ai passé du temps à revoir ma manière d’aborder le problème de traitement des csv et j’en suis arrivé, comme toi, à m’intéresser à readline et readlines et aussi à remplacer les séparateurs et les données avec split et replace et charger les valeurs dans un fichier à 2 dimensions puisque le but est de les imprimer.

J’ai eu droit à un ‹ dead-lock › en travaillant sur un fichier de données en cours d’utilisation par le programme d’acquisition (céation d’une copie de travail), le blocage de nano qui m’a fait perdre ma soixantaine de lignes(!) et pour finir devoir installer la mise à jour de la librairie libbz2-dev, lincursuses5-dev et suivantes. Au passage mon fichier de base (PAC_file) a été vérolé, suite à l’affolement de nano .
La vie avec linux n’est pas un long fleuve tranquille.

La dernière étape est de faire plot de deux ou 3 valeurs sur le même graphique.

Tu me demande de joindre le programme ; bien sur mais comment faire ? je ne vois pas comment mettre PJ même en changeant l’extension en jpg.

Bonjour,
Je m’auto-cite

Pour mettre du code, il faut ajouter 4 espaces devant chaque ligne. Ou copier/coller le sélectionner et cliquer sur l’icone « </> ».

A+