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

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

2 réponses

  1. Contributeur
    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
    1. 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