Forum Programmation.python lire et mémoriser une partie d'une ligne

Posté par  (site web personnel) .
Étiquettes : aucune
0
20
mar.
2009
Bonsoir, je suis débutant en python je cherche à faire un programme pour manipuler les fichiers de type gpx (gps). Pour l'instant le programme sait compter le nombre de points d'un fichier ainsi que le nombre de lignes d'un fichier.

Voilà à quoi ressemble une ligne d'un fichier gpx:

<![CDATA[TIME: 19-MAR-09 16:46:52RCR: B <b>(ButtonStamp)</b>VALID: SPSLATITUDE: 46.607128 NLONGITUDE: 6.584025 ESPEED: 16.528 km/h]]>

Il y a d'autres lignes entre ces lignes "utiles" mais j'utilise la fonction suivante pour extraire uniquement les lignes "utiles" qui contiennent le mot SPEED:


fichier = open('test.gpx')

for ligne in fichier:
if "SPEED" in ligne:
print ligne
fichier.close()

Au final je veux pouvoir récupérer la valeur en km/h qui est juste après le texte "SPEED", j'ai fait des tests avec le module "re.split" mais je n'arrive à rien. Si quelqu'un a une piste... :]
  • # oups

    Posté par  (site web personnel) . Évalué à 1.

    Voilà l'exemple

    <cmt><![CDATA[TIME: 19-MAR-09 16:46:52<br>RCR: B <b>(ButtonStamp)</b><br>VALID: SPS<br>LATITUDE: 46.607128 N<br>LONGITUDE: 6.584025 E<br>SPEED: 16.528 km/h]]></cmt>
    • [^] # Re: oups

      Posté par  . Évalué à 4.

      Ceci devrait faire l'affaire:

      units, decimals = re.match(r'.*SPEED: (\d+)\.(\d+).*', text).groups()
      speed = float("%s.%s" % (units, decimals))


      Par contre un petit test sur le retour de match avant d'appeler groups ne ferait pas de mal.
      • [^] # Re: oups

        Posté par  . Évalué à 1.

        Une autre possible :

        for line in file("test.gpx","r"):
          print re.search(".*SPEED: ([^ ]*) km/h.*",line).groups()[0]
  • # un module ?

    Posté par  (site web personnel) . Évalué à 2.

    pourquoi réinventer la roue ?

    doit y avoir un module pour parser ces fichiers
    http://pypi.python.org/pypi?%3Aaction=search&term=gps&am(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.