[Python] Copier certains éléments d'une liste

Fermé
grandu - 29 mars 2011 à 20:55
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 29 mars 2011 à 23:48
Bonjour,

j'ai une grille de points X, Y, Z comme suit comportant beaucoup d'enregistrement :
652,300,100
653,321,102
654,326,101
658,324,106
...
J'aimerai extraire une zone précise, par exemple créer un fichier dont seuls les points avec les coordonnées x entre 651 et 655 et y entre 321 et 325 apparaissent, sachant que les points ne sont pas dans un ordre précis. J'ai essayé en python mais étant débutant c'est pas facile. Le fichier est trop gros pour excel et équivalent.

Merci


A voir également:

2 réponses

Bonsoir

Excel peut suppoter 65636 lignes, dans certains cas ça peut etre insuffisant.
Mais avec une petite macro, on peut eviter de charger un long fichier structuré comme le tien.
Ce petit programme tout bete lit le fichier source ligne par ligne, si les coodonnées (X,Y) sont dans l'intervalle voulu, la ligne est transférée dans le fichier destination.
Colle cette macro dans un module excel, adapte les noms de fichiers et les Mini Maxi, et execute.
Essaye dabord sur un petit fichier exemple.
Si le fichier est vraiment tres long, l'execution peut demander plusieurs dizaines de secondes.

Sub Extraction()
Dim FichierSource As String, FichierDestination As String
Dim X As Integer, Y As Integer, Z As Integer
Dim XMini As Integer, XMaxi As Integer, YMini As Integer, YMaxi As Integer

FichierSource = "F:\f1.txt"
FichierDestination = "F:\f2.txt"
XMini = 234: YMini = 459
XMaxi = 243: YMaxi = 468

Close
Open FichierSource For Input As #1
Open FichierDestination For Output As #2

While Not EOF(1)
Input #1, X, Y, Z
If (X >= XMini And X <= XMaxi) And (Y >= YMini And Y <= YMaxi) Then
Write #2, X, Y, Z
End If
Wend
Close
MsgBox "Extraction terminée"

End Sub
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
Modifié par fiddy le 29/03/2011 à 23:57
Bonjour,
En python, cela donnerait simplement :
#A represente ta liste 
A=[(652,300,100),(653,321,102),(654,326,101),(658,324,106)] 
#B represente l'extraction 
B=[(x,y,z) for x,y,z in A if x in range(651,655) and y in range(321,325)] 
print B 

Cdlt,

Google is your friend
0