je vous prie de me corriger mon programme ou me proposer une autre solution SVP;
j'aimerais lire un fichier .dxf suivant ,puis récupérer et afficher les coordonnées de tous les points de la géométrie polyline.
CIRCLE
8 Undeflected
10
0.5
20
Polyline
10 #référence de la coordonnée x du point 1
-34.68044809800129 #la valeur de la coordonnée x du point 1
20 #référence de la coordonnée y du point 1
-1.29110251450677 #la valeur de la coordonnée y du point 1
10 #référence de la coordonnée x du point 2
-27.93802385557705 #la valeur de la coordonnée x du point 2
20 #référence de la coordonnée y du point 2
10.47227595099936 #la valeur de la coordonnée y du point 2
10
-16.82019664732431
20
3.156028368794326
10
-9.503949065119278
0
EOF
j'ai essayé avec le programme suivant de récupérer tous les coordonnées et les stocker dans une liste,mais j'ai arrive à afficher que la dernière valeur, les autres sont écrasées.
my_list = []
geometry= ['CIRCLE','LINE','Polyline','EOF']
maGeom = "none"
with open("my_file.dxf", "r") as fichier:
for ligne in fichier:
#si ya une geometrie dans une ligne du fichier on va l'affecter a maGeom
if ligne[:-1] in geometry:
maGeom = ligne[:-1]
#si maGeom est Polyline donc on affiche Polyline et lire les lignes suivantes tant qu'on trouve pas une autre geometrie et stocker ces données dans une liste
if maGeom == 'Polyline':
print 'Polyline'
ligne=next(fichier)
while ligne[:-1] not in geometry:
if '10' in ligne[:-1]:
x_valeur = [next(fichier) for x in xrange(1)]
my_list = [x_valeur]
#print my_list
if '20' in ligne[:-1]:
y_valeur = [next(fichier) for x in xrange(1)]
my_list = [y_valeur]
#print my_list
ligne=next(fichier)
print my_list
maGeom = ligne[:-1]
J'ai utilisé la boucle for x in xrange(1) pour lire la ligne suivante à celle qui porte 10 ou 20, et les nombres 10 et 20 sont juste des indices des coordonnées X et Y dans l'ordre, mais leurs valeurs c'est les lignes qui suivent ces indices.
j'utilise python 2 car je dois utiliser ce code sur le logiciel Abaqus qui accepte que python 2.7
Les commentaire sur le fichier .dxf (le premier fichier) sont là juste pour l’explication.
- Edité par SofianeToumi 11 février 2019 à 13:01:39
import re
START = 'Polyline'
END = ('EOF', '0')
PATTERN = "[-+]?\d*\.\d+|\d+"
x = [] # list of ccords x
y = [] # list of coords y
def add_value(cat):
line = next(f).rstrip('\n').strip()
n = re.search(PATTERN, line).group(0)
if cat == '10':
x.append(n)
else:
y.append(n)
with open("my_file.dxf", 'r') as f:
while True:
line = next(f).rstrip('\n').strip() # ignore lines before Polyline
if line == START:
break
while True:
line = next(f).rstrip('\n').strip()
if line in END: # check end of file
break
n = re.search(PATTERN, line).group(0)
add_value(n) # add values in x and y for category n
for a, b in zip(x, y):
print((a, b)) # display coords
Pour conclure,
fichier incomplet (voir ci-dessous)
fichier mal formé (par exemple ligne 21, je devrais avoir un 20 et non un 0)
difficile de faire quelque chose de propre avec un exemple aussi pourri (il manque une ligne entre 21 et 22)
Merci d'être plus précis dans les contraintes, prendre le temps d'envoyer un texte bien formé et résolvable afin d'éviter les retouches nous même... de la rigueur quoi !
- Edité par fred1599 11 février 2019 à 14:17:03
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
ça marche super bien, je vous remercie pour votre aide, je suis vraiment désolé pour les erreurs sur le fichier, je prendrai en compte de vos remarques dans le future.
De rien, cependant il reste à le comprendre avec les notions suivantes,
Les générateurs
Les expressions régulières
Pour ce dernier ça reste un gros pavé à digérer.
Les générateurs c'est moins long, mais particulier, je ne vois pas beaucoup de débutants qui les utilisent.
Toutes ces documentations se trouvent sur le net et en français, je te laisse chercher tranquillement.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)