Traiter un tableau en .txt sur python

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, Je dois traiter un tableau de ce type:

X Y Z

-0,283128325 0,000633593 0

-0,282837415 0,000719592 0

-0,282507431 0,000800225 0

-0,282139745 0,000875281 0

je dois enfaite tracer une courbe en fonction des x et y, et je souhaitais principalement savoir comment attribuer à x une liste de chaque terme de ce tableau ainsi qu'à y. Merci de votre aide.

Édité par val5797

+0 -0

Cette réponse a aidé l'auteur du sujet

Sur chaque ligne, tu fais un split afin de séparer au niveau de l'espace, puis tu convertis en float et tu stockes dans une list ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
x, y, z = [], [], []
with open("tab.txt") as f:
    for line in f:
        line = line.strip().replace(',', '.')
        if len(line) == 0:
            continue
        tmp = list(map(float, line.split()))
        x.append(tmp[0])
        y.append(tmp[1])
        z.append(tmp[2])
# print(x, y, z, sep='\n')

Édité par Bermudes

Le hasard n'est que le nom donné à notre ignorance et n'existerait pas pour un être ominscient., Émile Borel

+1 -0
Auteur du sujet

le but étant de stocker dans une liste afin de tracer une courbe. est-ce que tu pourrais m'expliquer ce que tu as fait. Parce que je connais pas la moitié des fonctions que tu as utilisé. Ps j'ai le message d'erreur: ValueError: could not convert string to float: 'ÿþX\x00'

Édité par val5797

+0 -0

Cette réponse a aidé l'auteur du sujet

Dans l'ordre :

  • je crée trois tableaux qui vont stocker (dans l'ordre) les triplets $(x, y, z)$ ;
  • pour chaque ligne du fichier :
    • j'enlève les '\n' de fin de ligne et je remplace les virgules en points (pour la conversion en flottants) ;
    • si la ligne est vide, je ne fais pas la suite ;
    • à l'aide de split(), je coupe la ligne aux espaces (donc j'ai une liste [x, y, z]), ensuite j'envoie cette liste dans la fonction map qui applique la fonction float sur chaque variable (donc je transforme la liste de chaînes de caractères en une liste de nombre décimaux) et je m'assure que c'est bien une liste en renvoyant tout ça dans la fonction list ;
    • et pour finir, vu que ma liste est [x, y, z], j'ajoute le nouveau x à la fin du tableau des x, le dernier y au tableau des y, et le dernier z au tableau des z.

Pour ton message d'erreur, est-ce que tu as la ligne X Y Z dans ton fichier ?

Le hasard n'est que le nom donné à notre ignorance et n'existerait pas pour un être ominscient., Émile Borel

+1 -0
Auteur du sujet

je les ai enlevé et maintenant j'ai ça:tmp = list(map(float, line.split())) ValueError: could not convert string to float: 'ÿþ-\x000\x00.\x002\x008\x003\x001\x002\x008\x003\x002\x005\x00'

+0 -0

Je ne pense pas. Poste ton fichier ici en secret (ou s'il est trop long, fais-en un pastebin) que je voie d'où vient le problème. :)

Le hasard n'est que le nom donné à notre ignorance et n'existerait pas pour un être ominscient., Émile Borel

+0 -0

Pourrais-tu également donner l'encodage du fichier ? Par défaut, Python 3 travaille avec de l'UTF-8 (je ne sais pas pour Python 2).

Si Python te sort ÿþ-\x000\x00.\x002\x008\x003\x001\x002\x008\x003\x002\x005\x00 c'est qu'il n'arrive pas à décoder tes nombres (il "voit" \x000 à la place d'un nombre par exemple).

Mon projet : OpenPlane, un utilitaire en Java pour les pilotes, les vrais !

+1 -0

Wizix te demande comment est encodé ton fichier (utf8, ansi, pages windows, etc.) et moi je te demande de nous fournir le contenu de ton fichier. Pour ce faire, soit vas sur ce site, soit poste-le ici (pour plus d'infos sur la syntaxe, c'est ici)

Le hasard n'est que le nom donné à notre ignorance et n'existerait pas pour un être ominscient., Émile Borel

+0 -0

Je n'ai personnellement aucun souci, il serait effectivement bien de connaître l'encodage de ton fichier. Tu es sous quel OS ?

Le hasard n'est que le nom donné à notre ignorance et n'existerait pas pour un être ominscient., Émile Borel

+0 -0

Système d'exploitation : Windows (si oui, lequel), Mac OS (si oui lequel), voire Linux (ce dont je doute ;) )

Le hasard n'est que le nom donné à notre ignorance et n'existerait pas pour un être ominscient., Émile Borel

+0 -0

Ok, je ne connais pas bien les outils Windows pour les encodages, mais as-tu Notepad++ installé ?

Le hasard n'est que le nom donné à notre ignorance et n'existerait pas pour un être ominscient., Émile Borel

+0 -0

Cette réponse a aidé l'auteur du sujet

Pour savoir ce que Python lit, tu peux intercaler print(line) entre for line in f: et line = line.strip().replace(',', '.'). Si tu as une bouillie illisible au lieu des nombres attendus, le problème viens de ton fichier.

http://nodraak.fr/ – Dictateur bienveillant de l'iTeam, logiciel libre et sécurité à l'ECE Paris

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte