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 :

Lecture d'un Fichier texte généré en C++


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut Lecture d'un Fichier texte généré en C++
    Je débarque du C++, ma première impression du python est que pour du haut niveau c'est bien compliqué.
    Ma Version de Python
    Python 2.4.3 (#69, Mar 29 2006, 17:35:34) [MSC v.1310 32 bit (Intel)] on win32
    J'utilise IDLE

    J'aimerais lire un fichier contenant les données d'objets 3D (objets exportés à partir de MAxscript..autrement dit à partir d'un programme C++, ce qui veus dire que il y a juste les espaces qui m'interresse et que je connais le type des variables que je lis. Lire le fichier est la première étape avant de le faire avec Blender qui utilise python comme language script)

    J'ai essayé la méthode du next, pas terrible du tout. Par exemple mon nombre d'objets est de 13(le premier chiffre lu), ça va il le lit correctement, puis vient le nombre de faces 43 et la il s'épare le 4 et le 3.

    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
    # -*- coding: iso8859-1 -*-
    fic = open('E:\\Python24\\project\\test.bf','r')
    NbrObject = fic.next()
    NbrFaces    = fic.next()
    for i in NbrFaces#c'est ici que je vois qu'il me sépare le 4 et le 3
        print i, "pfff"
    print NbrFaces[0] 
         
    TabVertices = fic.next()
    
    TabNormales = fic.next()
    if TabNormales[0] == ' ': #il me crée des objets contenents, on dirais, des espaces ou sauts lignes
        print "espace"
    else:
        print "c'est quoi finalement ?"
        print TabNormales[0]
        
    TabTVerts   = fic.next()
    
    NameFicTex  = fic.readline() #c'est censé me lire une ligne mais ça lit tout le fichier
    
    fic.close()
    J'ai alors essayé autre chose
    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
    # -*- coding: iso8859-1 -*-
    import csv
    
    fic = csv.reader(open('E:\\Python24\\project\\test.bf','r'), delimiter = ' ')
    # j'ai essayé aussi avec le délimiteur '\n' ça change rien
    
    # nettoyage de la liste...esque c'est une liste au moins?
    i = 0
    lenght_fic = 0
    for tmp in fic:
        lenght_fic+=1 
    #lenght_fic = len(fic) ça marche pas
    Traceback (most recent call last):
      File "E:\Python24\project\LectureFic_02.py", line 8, in -toplevel-
        lenght_fic = len(fic)
    TypeError: len() of unsized object
    
    while i<lenght_fic :
        j=0
        lenght_tab =0
        for tmp in fic[i]:
    #il aime pas mon fic[i]
    Traceback (most recent call last):
      File "E:\Python24\project\LectureFic_02.py", line 14, in -toplevel-
        for tmp in fic[i]:
    TypeError: unsubscriptable object
    
            lenght_tab+=1
        while j<lenght_tab :
            if fic[i][j] == ' ' :
                print "espace", fic[i][j] , i ,j
                fic[i].pop[j]
            elif fic[i][j] == '\n':
                fic[i].pop[j]
                print "chariot", fic[i][j] , i ,j
            else:
                print "nombre"
            j+=1
        i+=1
    
    for tab1 in fic:
        print tab1
    #D'ailleur esque je dois fermé le fichier avec CSV où c'est fermé unfois qu'il a tout mis dans fic
    Je me suis d'abord penché sur le codage (# -*- coding: iso8859-1 -*-) j'en ai essayé différents, ce qui ne change rien du tout.

    Maintenant je vais dire comment est structuré en gros mon fichier
    D'abord j'ai mon nombre d'objets , puis après vient le nombre de faces, ce qui me permet de savoir la taille des tableaux de données de l'objet et de parcourir sans erreurs le fichier puis après les tableaux viens le nom de la texture bornée par le caractère '|' qui pour le premier sera suivi d'un espace puis du nom de la texture puis du deuxième caractère.
    Merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    Utilisation next() et readline() en meme temps peut etre pose un probleme . Car readline seul fonctionne tres bien pour lire un fichier ligne par ligne.

  3. #3
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    J'ai essayé seulement avec readline , ça me fait la même chose qu'avec le next, quand j'écris mes éléments avec print le nombre 43 (nb de face est décomposé en deux avec un caratère invisible en plus à la fin . Ce qui est surement le caractère de fin de chaine ...donc j'obtien une chaine de caractère . Ce qui veus dire que j'ai plus cas convertir mais le hic , c'est que pour ma masse de coordonnées lut à la suite, est contenu dans une chaine de caractère (si c'est bien une chaîne qu'il m'envoi) , esque c'est faisable de pouvoir la convertir correctement en sortant chaqu'un nombre de la chaine ?

  4. #4
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    Citation Envoyé par Suryavarman
    ... quand j'écris mes éléments avec print le nombre 43 (nb de face est décomposé en deux avec un caratère invisible en plus à la fin ?
    Tu ecris comment tes elements avec print ??? Si tu utilise
    Citation Envoyé par Suryavarman
    for i in NbrFaces:
    print i
    tu lis caractere par caractere !! et c'est normal que les 4 et 3 sont 2 caracteres distincts

  5. #5
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    C'est bon j'ai compris le truc , je fais un code propre et je post une réponse plus explicite dès que possible:p


    EDIT:
    Non en fait tout est resté en caractère , mais chaque nombre est dans une case, reste à savoir pourquoi le atoi ne marche pas
    NameError: name 'atoi' is not defined
    EDIT:
    eval le fait très bien finalement

    EDIT:
    J'arrive pas à supprimer les deux Barres '|'. Seul celle du début disparait.
    J'ai essayé dans la console ça marche pourtant très bien.
    Le Code :
    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
    
    #-----------------------------------
    # Lecture du Chemin de la Texture
    #-----------------------------------
    print "Chemin de la Texture \n"
    NameFicTexture = ''
    Tmp = []
    while len(Tmp) == 0:
            NameFicTexture = fic.next()
            Tmp = NameFicTexture.split()
    #print Tmp    
    NameFicTexture = NameFicTexture.strip('|')# on supprime les Barres qui encadre le Nom
    NameFicTexture = NameFicTexture.lstrip() # on supprime l'espace à Gauche
        
    print NameFicTexture, "Fin objet", NameFicTexture.count('|')
    Le Résultat:
    Chemin de la Texture

    E:\Documents and Settings\Gandi\Bureau\_-=Sylgwael=-_\Mubta\SetMuraille\Textures\greek_roman006.jpg|
    Fin objet 1


    Test dans la console :
    '| E:\Documents and Settings\Gandi\Bureau\_-=Sylgwael=-_\Mubta\SetMuraille\Textures\greek_roman006.jpg|'.strip('|')
    ' E:\\Documents and Settings\\Gandi\\Bureau\\_-=Sylgwael=-_\\Mubta\\SetMuraille\\Textures\\greek_roman006.jpg'

    je comprend pas

    EDIT:
    Je viens d'essayer en remplaçant dans le fichier le chemin par
    'E:\\Documents and Settings\\Gandi\\Bureau\\_-=Sylgwael=-_\\Mubta\\SetMuraille\\Textures\\greek_roman006.jpg'
    J'ai rajouté un '\'. ça ne change rien.

  6. #6
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Bon pour palier à ça ...une petit boucle et une condition :p
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #bug il reste la dernière barre à supprimer    
        Tmp = NameFicTexture
        NameFicTexture = ''
        for j in Tmp:
            if j != '|':
                NameFicTexture += j

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture d'un fichier texte dans un projet TOMCAT
    Par brice_nice dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/07/2005, 15h04
  2. lecture d'un fichier texte
    Par benahpets dans le forum MFC
    Réponses: 5
    Dernier message: 22/06/2005, 11h50
  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