CINQUIÈME TRUC
Utilisation d’un IDE (integrated development environment) performant pour gérer plusieurs fichiers pythons ou autre, plusieurs fichiers de données, plusieurs versions, etc.
Il y a de nombreux IDEs python, celui que je recommande actuellement est la version gratuite de PyCharm appelé PyCharm Community Edition (Si elle est après la version Pro plus bas dans la page) ; elle est très complète comme version.
A installer sur votre ordinateur comme habituellement, n’importez pas de « settings » et prenez les réglages par défaut.
Créez un nouveau projet, en fait un dossier qui va contenir vos futurs développements en python. Vous pouvez vérifier que PyCharm va bien utiliser python3.x pour vos développements.
Fermer le « Tip of the Day » et vous avez l’interface de PyCharm devant les yeux:
OK c’est ma version car vous n’avez en fait aucun dossier ni aucun fichiers actuellement. Donc par exemple, faites click droit dans la zone « Fichiers et dossier » dans le menu choisir:
New > Directory
Entrez le nom du dossier par exemple test et copier coller le fichier exercice1.py dedans.
Ouvrez le fichier exercice1.py en double cliquant dessus :
On peut exécuter le fichier exercice1 via le bouton en haut à droite ou le raccourci indiqué en survol de ce bouton. Le résultat de l’exécution sera visible donc dans la fenêtre du bas.
EXERCICE QUATRE
Télécharger le fichier de données à cette adresse : traitement_fichier.xls
Copiez le fichier dans PyCharm avec Copier / Coller et profiter pour renommer le fichier en traitement_fichier.txt :
Nous allons manipuler le fichier de données traitement_fichier.txt pour extraire de l’information, vous pouvez l’ouvrir dans PyCharm pour voir sa composition:
timestamp;latitude;longitude;altitude 1491486784141;43.64093363956815;3.851249759920415;109.30910031218662 1491486785141;43.64089947397977;3.8512505542990336;111.87747544303649 1491486786141;43.64088583922287;3.8512393755398326;113.0741231549388 ...
Il s’agit des données en provenance d’un vol de planeur enregistré avec le GPS d’un smartphone.
On va donc dans le dossier test avoir le premier fichier exercice1.py, le fichier de données traitement_fichier.txt et on va ajouter un nouveau fichier, manipulation_fichier.py :
On va accéder au fichier pour afficher le contenu avec ces commandes:
with open("traitement_fichier.txt", "r") as fichier: contenu = fichier.readlines() print( contenu ) fichier.close()
Voici les données obtenus :
['timestamp;latitude;longitude;altitude\n', '1491486784141;43.64093363956815;3.851249759920415;109.30910031218662\n',
Nous devons en premier lieu traiter le problème du retour à la ligne « \n » en le retirant pour chaque ligne.
Voici le code pour traiter ligne à ligne la variable contenu en retirant à chaque fois le retour à la ligne:
with open("traitement_fichier.txt", "r") as fichier: contenu = fichier.readlines() for ligne in contenu: ligne = ligne.rstrip("\n") print(ligne) fichier.close()
Vous pouvez voir que l’indentation du code en python remplace les end du Matlab. Ils ne sont donc pas optionnel, ils donnent un sens à ce qui est dans la boucle et ce qui n’est pas dans la boucle.
% Exemple Matlab valable mais non indenté for c = 1:10 for r = 1:20 H(r,c) = 1/(r+c-1); end end
Nous allons ensuite nous concentrer sur le timestamp et l’altitude en extrayant que ces 2 colonnes:
with open("traitement_fichier.txt", "r") as fichier: contenu = fichier.readlines() for ligne in contenu: ligne = ligne.rstrip("\n") data = ligne.split(";") # ici afficher les colonnes 0 et 3 fichier.close()
OK à vous , il faut extraire uniquement les altitudes qui ont été enregistré après le timestamp « 1491486791998 »
RÉPONSE A L’EXERCICE 4
Afficher la réponse pour avoir les altitudes ->
with open("traitement_fichier.txt", "r") as fichier: contenu = fichier.readlines() for ligne in contenu: ligne = ligne.rstrip("\n") data = ligne.split(";") if "1491486791998" < data[0] : print(data[0] + " - " + data[3]) fichier.close()
SIXIÈME TRUC
Test de quelques commandes dans l’interpréteur intégré de PyCharm. Nous avons avec PyCharme la possibilité de lancer des programmes dans l’IDE mais pour tester quelques lignes de commandes, l’IDLE est très pratique. Heureusement, nous pouvons avoir l’interpréteur de commande dans PyCharm via le Menu Tools > Python Console …
Vous aurez ainsi la possibilité de tester quelques commandes avant de les intégrer dans votre fichier de commandes.
EXERCICE CINQ
Afficher au format CSV les données suivantes pour les timestamps supérieurs à « 1491486791998 » avec un numéro de ligne incrémenté à chaque ligne:
1,1491486784141,109.30910031218662 2,1491486785141,111.87747544303649 3,1491486786141,113.0741231549388 4,1491486787141,112.96381095914386 5,1491486788142,113.037303562919 6,1491486789142,116.63811281139428 7,1491486790142,117.30185665137451
Nous allons donc créer une variable numero_ligne et l’incrémenté à chaque lecture de ligne :
numero_ligne = 0
Ensuite nous allons afficher les informations que nous voulons avec ce genre de ligne qui concatène les informations avec des « , »
print( numero_ligne + "," + data[0] + "," + data[3] )
Mais malheureusement ou pas si vous essayez cette ligne que vous pouvez tester dans l’IDLE de Python ou en ouvrant l’interpréteur dans PyCharm comme vu précédemment.
numero_ligne = 0 print( numero_ligne + "," )
Vous avez une erreur de type numero_ligne est de type entier (int en VO) et python ne veut pas prendre la responsabilité de le convertir en chaine de caractère (str en VO).
Essayez donc ceci encore une fois dans l’interpreteur:
unTexte = "1491486791998" unNombre = int( unTexte ) unNouveauTexte = str( unNombre )
On doit donc convertir notre numero_ligne en str pour l’utiliser pour l’affichage.
En fait depuis le début on manipule des textes et non pas des nombres. Ce qui parfois va entrainer quelques problèmes de conversion que l’on verra plus tard.
RÉPONSE A L’EXERCICE 5
Afficher la réponse pour avoir les altitudes avec des numéro de lignes et un affichage en CSV ->
with open("traitement_fichier.txt", "r") as fichier: contenu = fichier.readlines() numero_ligne = 0 for ligne in contenu: ligne = ligne.rstrip("\n") data = ligne.split(";") if numero_ligne > 0: print( str(numero_ligne) + "," + data[0] + "," + data[3] ) numero_ligne = numero_ligne + 1 fichier.close()
EXERCICE SIX
Maintenant, pour pouvoir enchainer les futurs traitements sur les données, le plus simple est de sauvegarder notre résultat au lieu de l’afficher à l’écran.
Pour écrire un fichier, on va faire en fin de notre programme comme ceci pour tester la création du fichier:
with open("extraction_fichier.txt", "w") as fichier_sortie: fichier_sortie.write( "numero_ligne;timestamp;altitude" ) fichier_sortie.close()
A vous d’intégrer ces modifications pour écrire non plus seulement une ligne d’entête mais toutes les données extraites précédemment dans ce fichier
RÉPONSE A L’EXERCICE 6
Ecrire les données extraites dans un fichier ->
with open("traitement_fichier.txt", "r") as fichier: contenu = fichier.readlines() numero_ligne = 0 with open("extraction_fichier.txt", "w") as fichier_sortie: for ligne in contenu: ligne = ligne.rstrip("\n") data = ligne.split(";") if numero_ligne > 0: print( str(numero_ligne) + "," + data[0] + "," + data[3] ) fichier_sortie.write( str(numero_ligne) + "," + data[0] + "," + data[3] ) fichier_sortie.write("\n") else: fichier_sortie.write("numero_ligne;timestamp;altitude") numero_ligne = numero_ligne + 1 fichier_sortie.close() fichier.close()
SEPTIÈME TRUC
Le débugger est le meilleurs outil intégré dans les IDEs quelque soit le langage de programmation. Au lieu de ne disposer des erreurs ou des messages à la fin de l’exécution des programmes, le débuggeur fait exécuter étape par étape le programme.
La différence est similaire entre l’exécution d’une action de football en plein vitesse ou au ralenti:
![]() |
Nous allons donc pour commencer ajouter un point d’arrêt à notre programme puis le faire exécuter ligne par ligne.
Pour bien débuter, nous allons mettre ce point d’arrêt à la première ligne de notre programme; plus tard nous mettrons ce point d’arrêt plus loin dans le programme car ce qui va nous intéresser sera non pas le début mais un endroit spécifique du programme.
C’est similaire avec l’action du but que l’on va décortiquer et non pas tout le début du match.
Placer le point d’arrêt en cliquant à droite du numéro de ligne, normalement un petit point rose indique que le point d’arrêt est actif.
Puis appuyer sur le bouton « Debug » en haut à droite juste à côté du bouton « Run ».
Le programme va démarrer et se mettre en pause sur la ligne avec le point d’arrêt. Pour enchainer ligne par ligne notre programme, nous allons utiliser soit le bouton « Ligne suivante » sur le dessin (Step over en VO) soit pour plus de simplicité la touche Fn+F8 sur MacOs et F6 sous Windows:
Nous pouvons avoir l’état des variables en mémoire soit dans la fenêtre du bas soit dans le code juste à droite de la ligne exécutée. Le mode debugage est très utile pour voir ce qui peut entrainer une erreur dans notre programme et en vérifiant l’enchainement qui est réalisé selon l’état des variables.
Pour retirer le point d’arrêt il faut cliquer de nouveau dessus. Vous pouvez avoir plusieurs points d’arrêt et les options de débogages sont très nombreuses, nous ne rentrerons pas dans les détails pour l’instant.
EXERCICE SEPT
Essaye le mode debugage sur votre programme pour vérifier l’enchainement des étapes.
Faites un point d’arrêt en face de l’instruction :
numero_ligne = numero_ligne + 1
Faites un clic droit sur le point d’arrêt et indiquer comme Condition:
numero_ligne == 10
Relancer le debugogage pour vérifier que le point d’arrêt ne se déclenche que quand cette valeur est atteinte.
EXERCICE HUIT
Nous voudrions obtenir le fichier de données suivant avec les timestamps qui sont transformé en intervalles de temps entre deux échantillonnages depuis un t zéro à la première valeur acquise par le GPS.
Ancien fichier:
timestamp;latitude;longitude;altitude 1491486784141;43.64093363956815;3.851249759920415;109.30910031218662 1491486785141;43.64089947397977;3.8512505542990336;111.87747544303649 1491486786141;43.64088583922287;3.8512393755398326;113.0741231549388 1491486787141;43.64090016392363;3.851241228679665;112.96381095914386
Nouveau fichier avec les intervalles de temps
1,0,109.30910031218662 2,1000,111.87747544303649 3,1000,113.0741231549388 4,1000,112.96381095914386 5,1001,113.037303562919 6,1000,116.63811281139428 7,1000,117.30185665137451 8,1857,117.30387542891553 9,1000,117.57712510977889 10,1000,118.1639542835122 11,1000,118.54163427393473
Calcul des intervalles de temps entre deux acquisitions ->
with open("traitement_fichier.txt", "r") as fichier: contenu = fichier.readlines() numero_ligne = 0 with open("extraction_fichier.txt", "w") as fichier_sortie: for ligne in contenu: ligne = ligne.rstrip("\n") data = ligne.split(";") if numero_ligne > 0: if numero_ligne == 1: tzero = int(data[0]) deltaTemps = int(data[0]) - tzero # le tzero est recaluler à chaque fois après utilisation par le deltaTemps tzero = int(data[0]) print( str(numero_ligne) + "," + str(deltaTemps) + "," + data[3]) fichier_sortie.write( str(numero_ligne) + "," + str(deltaTemps) + "," + data[3]) fichier_sortie.write("\n") else: fichier_sortie.write("numero_ligne;timestamp;altitude") numero_ligne = numero_ligne + 1 fichier_sortie.close() fichier.close()