Enregistrement de fichiers CSV

Pour le moment, nous nous sommes intéressés au chargement de fichiers (CSV, GPX). Nous allons aborder dans ce chapitre la sauvegarde de données en mémoire dans un fichier.

datafile = open("todolist.txt", "w")

datafile.write("Revoir Blade Runner 2049 en IMAX3D\n")
datafile.write("Acheter le dernier album de Tom Haugomat\n")
datafile.wite("Terminer le cours Python pour les M2 IEAP\n")

datafile.close()

Nous utilisons la même fonction open() que pour le chargement mais avec un mode de fichiers en écriture. La méthode write() permet d'écrire une chaîne de caractères dans le fichier.

Info

On utilise le caractère \n pour commencer une nouvelle ligne.

Exercice

Modifier le script Python GPXplorer.py pour enregistrer au format CSV les données de temps, de distance et d'altitude calculées à partir du fichier GPX.

Time;Distance;Elevation
0.0;0;82.0
13.0;22.09;82.0
33.0;22.09;82.0
54.0;165.61;82.0
59.0;176.49;83.0
65.0;180.75;83.0
Correction
from lxml import etree
from GPSutils import *

# Liste des latitudes exprimées en degrés
latitude  = []

# Liste des longitudes exprimées en degrés
longitude = []

# Liste des altitudes exprimées en mètres
elevation = []

# Liste des distances cumulées
distance  = []

# Liste des temps en secondes,
# le premier étant égal à 0
time      = []

inputFilename  = "RATJ2012-21km-herve.schely.gpx"
outputFilename = inputFilename[0:-3] + "csv"

root = etree.parse(inputFilename)
ns = "http://www.topografix.com/GPX/1/1"

#
# Heure de départ
#
datetimelist = root.xpath("/ns:gpx/ns:trk/ns:trkseg/ns:trkpt/ns:time",
                          namespaces={"ns": ns}) 
startTime = datetimelist[0].text

trackpointlist = root.xpath("/ns:gpx/ns:trk/ns:trkseg/ns:trkpt",
                            namespaces={"ns": ns}) 
for point in trackpointlist:
    latitude.append(float(point.get("lat")))
    longitude.append(float(point.get("lon")))
    for param in point.getchildren():
        if param.tag == "{" + ns + "}ele":
            elevation.append(float(param.text))

        if param.tag == "{" + ns + "}time":
            time.append(duration(startTime, param.text))

distance.append(0)
for i in range(1,len(latitude)):
    d = greatCircleDistance(latitude[i-1], longitude[i-1], latitude[i], longitude[i])
    distance.append(distance[i-1]+d)

outputFile = open(outputFilename, "w")
outputFile.write("Time;Distance;Elevation\n")

for i in range(0,len(time)):
    outputFile.write(str(time[i]) + ";" +
                     str(round(distance[i],2)) + ";" +
                     str(elevation[i]) + "\n")

outputFile.close()

Il nous reste un dernier point à aborder en lien avec les relevés GPS : la représentation de trajectoires à l'aide d'une carte.