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

Python Discussion :

[débutant]Lecture d'un fichier texte


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Par défaut [débutant]Lecture d'un fichier texte
    Bonjour,

    j'ai un fichier ascii qui a cette tête là:

    solid SC_CONDENSEUR_AMONT
    color 0.83529 0.57255 0.24314
    facet normal 0.999961257 0 0.00880447961
    outer loop
    vertex -1945.27686 -344.599426 345.291809
    vertex -1945.24146 -340.597046 341.27124
    vertex -1945.24146 -344.599426 341.27124
    endloop
    endfacet
    .....

    voici le code que j'utilise pour lire les lignes et trier en fonction de 2 critères : "vertex" et "normal":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    fidr = open(fichier, 'r') # Ouverture du fichier
       while 1: # Boucle sur tout le fichier
          ligne = fidr.readline()
          if ligne == '':
             break # fin du fichier
          if string.find(ligne, 'normal'): # traiter le cas "normal"
             numpy.array = ??? 
          if ligne.find('vertex'): # traiter le cas "vertex"
             numpy.array = ???
    Ce que je souhaite :
    - lire ligne après ligne le fichier
    - pour chaque ligne, tester si les mots "vertex" et "normal" apparaissent
    - pour chaque cas, convertir les chaines en valeurs numériques et les stocker dans 2 tableaux vertex et normal

    Je sèche sur la conversion du texte en float ....

  2. #2
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Essayes ceci pour commencer :
    PS : il y a une balise CODE, symbolisé par #, pour insérer des codes.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Par défaut
    Ce que tu as écrit marche très bien.

    Ce que je ne sais pas faire, c'est qu'une fois la ligne qui m'intéresse détectée (par exemple une ligne contenant le mot "normal") et stockée dans la variable ligne, comment isoler le morceau de chaine "0.999961257 0 0.00880447961
    " et le convertir en 3 valeurs numériques qui seront stockées dans un tableau de dimension 3 lignes sur XXX colonnes

  4. #4
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut
    Bonjour,

    Je n'ai pas trop compris comment tu veux agencer tes tableaux de résultats, mais voici déja un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fichier="fichier.txt"
    fidr = open(fichier, 'r') # Ouverture du fichier
    normal=[]
    for ligne in fidr :
        if 'normal' in ligne: # traiter le cas "normal"
            y=[float(x.rstrip("\n")) for x in ligne.split(" ")[-3::]]
            print y
            normal.append(y)
        if 'vertex' in ligne: # traiter le cas "vertex"
            print ligne
    print normal

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Hello,

    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
    import numpy as np
    import re
     
    pat = re.compile('(facet normal|vertex) ([-\d.]+) ([-\d.]+) ([-\d.]+)')
     
    dico ={'facet normal':[],'vertex':[]}
     
    ch = open('fidr.txt').read()
    for m in pat.finditer(ch):
        dico[m.group(1)].append(map(float,m.group(2,3,4)))
     
    arnor = np.array(dico['facet normal']).transpose()
    print arnor
    print
    arver = np.array(dico['vertex']).transpose()
    print arver

    PS

    Je viens de m'apercevoir que tu ne cites pas le mot numpy.

    Mais comme je ne connais pas en Python de structure de données tableau apte à représenter des tableaux à double entrée (= des grilles, dans le sens commun pour la présentation graphique d'informations), je me suis tourné d'évidence vers les arrays du module numpy.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Par défaut
    Merci pour vos exemples !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pat = re.compile('(facet normal|vertex) ([-\d.]+) ([-\d.]+) ([-\d.]+)')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for m in pat.finditer(ch):
        dico[m.group(1)].append(map(float,m.group(2,3,4)))
    Pourrais-tu commenter ton code eyquem : j'ai découvert Python il y a une semaine et je n'ai pas tout suivi !...

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/03/2006, 17h12
  2. Réponses: 6
    Dernier message: 23/02/2006, 12h09
  3. [C#] Lecture d'un fichier texte (farfelu)
    Par choas dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/04/2005, 14h33
  4. Lecture d'un fichier Texte
    Par jcharles dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/10/2004, 14h58
  5. Stockage de données & lecture d'un fichier texte
    Par petitours dans le forum C++Builder
    Réponses: 6
    Dernier message: 13/03/2004, 14h05

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