Récupération données fichier texte

Fermé
EatFresh Messages postés 4 Date d'inscription mardi 2 juin 2015 Statut Membre Dernière intervention 15 juin 2015 - 2 juin 2015 à 10:25
 Utilisateur anonyme - 15 juin 2015 à 18:27
Bonjour,

Merci d'avance pour votre temps. Dans le cadre de mes études j'en suis venu à mesurer la concentration de paracétamol dans une gélule par chromatographie HPLC_UV. l'objectif est de retrouver les valeurs données par le logiciel intégré grâce à un programme en Python. J'ai récupéré des données brutes dans un fichier au format .arw puis sauvegardé en fichier .text, de la forme :

0.02966667,1.067428e-005
0.04633333,1.014129e-005
0.063,-3.494247e-005

L'objectif serait de stocker les deux termes dans des listes séparées puis de tracer la courbe. Voici mon programme qui ne marche pas, l'erreur est sur la conversion string -> float

Pourriez-vous m'aider ?

from os import chdir
chdir("D:\DonnéesChromatoTipe2015\data raphael")
from numpy import*
import matplotlib.pyplot as plt

fic=open("16838-3.txt","r")                             #ouverure du [/contents/456-txt-fichier-txt fichier texte]
texte=fic.readlines()                                       #lecture de toutes les lignes du fichier
fic.close()


T=[]                                                              #initialisation des variables
X=[]
L=len(texte)


for i in range (0,L) :                                       #Stockage dans les listes
    ligne=texte[i].rstrip("\n")                           #Suppression passage à la ligne
    ligne=ligne.split(",")
    X.append(ligne)
    T.append(ligne)
    i=i+1
print(T,X)


# Tracé de la courbe

plt.plot(T,X)
plt.grid(True)
plt.show()




Merci
A voir également:

2 réponses

Utilisateur anonyme
2 juin 2015 à 13:28
Le problème vient sûrement du e-005. Il y a deux solutions : soit tu t'arrange à sauvegarder tes valeurs sans le e soit tu crées un programme qui prend en entrée la valeur avec le e et qui renvoie en sortie un nombre. Par exemple : conversion(3e-002) = 0.02. Il suffit juste de détecter le e puis prendre ce qu'il y a à droite le convertir en un nombre gérable (supprimer les 0 devant) puis le passer en exposant. C'est faisable.
0
EatFresh Messages postés 4 Date d'inscription mardi 2 juin 2015 Statut Membre Dernière intervention 15 juin 2015
2 juin 2015 à 13:56
merci pour ta réponse rapide. D'accord je transformerais ces nombres pour que Python les acceptent.
Autre chose : je ne m'en sors pas avec les lignes 19 et 20 pour ajouter les éléments aux listes X e T,
- à chaque boucle ligne est bien un tableau de deux valeurs non ?
- pourquoi ligne[1] renvois l'erreur index out of range alors ?
0
Utilisateur anonyme
2 juin 2015 à 14:20
Normalement, tu as raison. C'est bien un tableau de deux éléments. Fais un print(ligne) au niveau de la boucle pour voir ce qu'il se passe à chaque étape.
0
EatFresh Messages postés 4 Date d'inscription mardi 2 juin 2015 Statut Membre Dernière intervention 15 juin 2015
2 juin 2015 à 19:48
Un print(ligne) me renvoie [ '3,00...' , ' 4,000' ] par exemple. Est ce que le fait que les valeurs sont entre ' peut pose problème ?
0
Utilisateur anonyme
4 juin 2015 à 10:20
Les guillemets permettent de définir une chaîne de caractère (string ou str). Si le programme te dit pour ligne[1] out of range, c'est qu'il y a une liste qui contient 1 élément au plus. As-tu bien vérifier toutes les valeurs ?
0
EatFresh Messages postés 4 Date d'inscription mardi 2 juin 2015 Statut Membre Dernière intervention 15 juin 2015
15 juin 2015 à 11:14
Bonjour, merci de ton temps, avec les oraux qui arrivent je n'ai pas eu le temps de me consacrer au programme jusqu'à aujourd'hui. Si cela t'intéresse j'ai trouvé une solution, qui n'est surement pas la meilleure...:
-Transformer le fichier en remplaçant les ',' par des '.' pour passer dans le format anglo-saxon et les ';' par des espaces.
-Modifier le programme pour séparer ligne au niveau des espaces.
La courbe souhaitée est bien affichée !!
Merci pour tes réponses,
Bonne Journée
0
Utilisateur anonyme
15 juin 2015 à 13:34
0.02966667,1.067428e-005
0.04633333,1.014129e-005
0.063,-3.494247e-005

Pour moi, tu as utilisé des points et non des virgules pour les nombres décimaux et il n'y a pas de point virgule mais des virgules pour séparer ... J'aurais peut-être pu débogger ça avant du coup
0