IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

récupération de données à partir d'un .txt pour traitement avec matplotlib


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1
    Points : 2
    Points
    2
    Par défaut récupération de données à partir d'un .txt pour traitement avec matplotlib
    Bonjour,

    Je dispose d'un fichier .txt tels que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       0  -38  -38 -2.46576042E+01 -2.46521454E+01  2.55509131E-02
       0  -38  -37 -2.67513046E+01 -2.45731792E+01  3.58856022E-02 
       0  -38  -36 -2.90129375E+01 -2.44239025E+01  1.72941908E-02 
        .....
        .....
        ......
     133   38   36  3.39015436E+00  3.27832365E+00  2.92592859E+00  
     133   38   37  3.35034561E+00  3.27640772E+00  2.75385523E+00  
     133   38   38  3.24593401E+00  3.25073957E+00  2.51267242E+00

    Je cherche à extraire les colonnes et les mettre dans des tableaux, à partir des valeurs 133 de la première colonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=[valeur de la colonne3 ]
    y=[valeur de la colonne4]
    z=[valeur de la colonne5]
    A la fin, je crée des graphes 3D avec matplotlib.
    J'ai du mal à commencer.
    Mais, ma première idée était de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    import numpy as np
    import pylab 
    import csv                  
    import Gnuplot
    from numpy import*
    import matplotlib.pyplot as plt 
    import matplotlib.cm as cm 
     
     
    filename="sres_finale_frott03_v4m30imp1.txt"
     
     
    x,y,z = loadtxt(filename, unpack=True) 
     
    t=reshape(z,(10000,10000))
     
     
    Là deuxième: 
     
     
    from pylab import * 
    import matplotlib.pyplot as plt
    import numpy as np
     
    # obtention des donnees
     
    def recup_donnees(filename,numcolx,numcoly):
      g = open(filename,'r')
      donnees = g.readlines()
      g.close()
      for j in range(1,len(donnees)):
        tmp = donnees[j].split()
        mytime = matrix(tmp[numcolx])
        defo = matrix(tmp[numcoly])    
      return mytime,defo
     
     
    filename='sres_finale_frott03_v4m30imp1.txt' 
     
    numcolx = 3
    numcoly = 4
     
    mytime,defo = recup_donnees(filename,numcolx,numcoly)
    Aucune ne fonctionne

    Je commence à saturer.

    Toute aide est la bienvenue

    Merci d'avance

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Un fichier texte se lit souvent avec une boucle sur readline() ou un readlines() si le fichier n'est pas trop gros. il faut ensuite nettoyer les lignes avec la méthode strip() des chaines, et on peut enfin séparer les différentes données par la méthode split(sep) des chaines, sep étant le séparateur utilisé, souvent un ';' ou un '\t' pour les fichiers csv, pourquoi pas un espace ' ' dans ton cas. Je t'ai mis un exemple de code. Il ne reste plus si j'ai bien compris qu'à organiser tes données en colonnes au lieu de lignes, ce qui ne doit pas être trop dur.

    A+

    Pfeuh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    def getTextData(fname, sep=None):
        data = []
        fp = open(fname, 'r')
        lines = fp.readlines()
        for line in lines:
            if sep == None:
                data.append(line.strip().split())
            else:
                data.append(line.strip().split(sep))
        return data
     
    print getTextData('file.txt', ' ')

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Beaucoup de fouillis dans tes imports, plusieurs fois la même chose, bof !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import numpy as np
    data = np.fromfile("fichier.txt", sep=" ").reshape(-1, 6)
    indices = np.where(data[0] > 132)
    my_data = data[indices]
    x = data[2,:]
    y = data[3,:]
    z = data[4,:]
    plus ou moins un truc du style.

Discussions similaires

  1. Réponses: 10
    Dernier message: 07/01/2013, 11h25
  2. Récupération des données d'un fichier .txt
    Par vincou dans le forum VB.NET
    Réponses: 3
    Dernier message: 24/07/2007, 10h55
  3. Récupération de données à partir des fichiers bruts
    Par grinder59 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 23/07/2007, 14h44
  4. Réponses: 10
    Dernier message: 17/11/2006, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo