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