TP-cours Python Fichiers

publicité
TP-cours Python
Fichiers
Système d’exploitation
Complément
En informatique, un système d'exploitation (souvent appelé OS pour Operating System, le terme anglophone) est un ensemble de
programmes qui pilote l'utilisation des ressources d'un ordinateur par des logiciels applicatifs.
Le système d'exploitation est le premier programme exécuté lors de la mise en marche de
l'ordinateur, après l’amorçage. Il sert d'intermédiaire entre les logiciels et le matériel informatique.
Il reçoit des demandes d'utilisation des ressources de l'ordinateur de la part des logiciels
applicatifs (mémoires, disques durs, processeur, communication vers des périphériques ou via le
réseau). Le système d'exploitation accepte ou refuse ces demandes, puis réserve les ressources en
question pour éviter que leur utilisation n'interfère avec d'autres demandes provenant d'autres
logiciels.
Le système d'exploitation permet :
- d'exécuter des programmes « simultanément » (en réalité, en temps partagé) ;
- de lire et écrire des informations (gestion de la mémoire) ;
- de manipuler les fichiers (gestion des disques, de l’arborescence des fichiers…) ;
- de gérer les périphériques d’entrée (clavier, écran tactile, souris, scanner, webcam,
micro…) et de sortie (écrans, imprimantes…) ;
- de communiquer entre ordinateurs (gestion des ressources et des droits) ;
- de déceler des erreurs.
Ces services permettent à plusieurs usagers et plusieurs programmes de se partager les
ressources de l'ordinateur.
Il existe sur le marché des dizaines de systèmes d'exploitation différents, souvent livrés avec l'appareil informatique. C'est le cas de
Windows, Mac OS, Irix, Symbian OS, Linux (pour lequel il existe de nombreuses distributions) ou Android.
D’après https://fr.wikipedia.org/wiki/Syst%C3%A8me_d'exploitation
Module os – OS = Operating System = système d’exploitation
Le module os possède une fonction permettant de connaître le répertoire courant (getcwd = get current working directory) et une
fonction permettant de changer de dossier (chdir = change directory).
Le chemin Windows
U:\Documents\Informatique
s’écrit en Python 'U:\\Documents\\Informatique'.
Noter les \\ au lieu de \ dans le chemin (avec un Mac Apple, il faudra utiliser / ).
1.
Tester les instructions suivantes :
import os
rep = os .getcwd()
print(rep)
# Résultat de la forme : U:\\Documents\\...
Pyzo – Chemin (path)
Pour déterminer le chemin jusqu’à un fichier, afficher l’arborescence dans
Pyzo (menu Outils/File browser), copier le chemin et remplacer \ par \\.
PCSI – IPT G. Monod
TP_fichiers.docx
1/5
Création d’un fichier texte avec le bloc-notes ou Notepad++
2.
3.
Ouvrir le bloc-notes ou Notepad++ à l’exclusion de tout autre traitement de texte (word en particulier !).
Taper les lignes suivantes :
Ceci est un fichier texte.
Ligne 2 : "A" ; 1 + 2/3 - 4*5 = 0 ?!
Dernière ligne.
4.
Dans le répertoire destiné à ce TP, enregistrer le fichier sous le nom fic0.txt
ATTENTION : le bloc-notes ajoute parfois automatiquement l'extension .txt donc, en cas d'erreur Python [Errno 2] No
such file or directory, dans la zone "Nom de fichier" ne pas entrer fic0.txt mais bien fic0
5.
Fermer le fichier.
Retenir
En réalité, le fichier obtenu contient des caractères spéciaux non affichables (invisibles dans l’éditeur de texte).
En particulier, il contient des caractères de contrôle pour un indiquer les retours à la ligne (ou LF = Line Feed).
En Python, ce caractère indiquant un retour à la ligne est \n (https://docs.python.org/3.1/reference/lexical_analysis.html).
6.
Tester le caractère « retour à la ligne » en Python en tapant la commande suivante dans Pyzo :
print('Ceci est un fichier texte.\nLigne 2 : "A" ; 1 + 2/3 - 4*5 = 0 ?!\n\nDernière ligne.')
Ainsi, le fichier précédent peut être considéré comme un objet de type chaîne :
index
caractère
0
1
2
3
C
e
c
i
4
5
6
7
e
s
t
8
9
10
u
n
11
12
13
14
15
16
17
18
f
i
c
h
i
e
r
19
20
21
22
23
24
25
26
27
…
t
e
x
t
e
.
\n
L
…
Ouverture et fermeture de la connexion à un fichier – Modes d’ouverture
L’ouverture d’un fichier se fait grâce à une instruction réalisant :
- l’ouverture du fichier ;
- la création d’une variable contenant les informations relatives à la connexion avec le fichier.
La fermeture du fichier permet de mettre fin à la connexion avec le fichier. Celui-ci doit impérativement être fermé une fois le
travail effectué car les autres programmes ne peuvent pas ouvrir un fichier déjà ouvert (dans le cas contraire, cela poserait un
problème de synchronisation des modifications engendrées par les différents programmes).
Retenir
Ouverture d’un fichier : fic = open('U:\\Documents\\...\\nom_fichier.txt','r')
fic est la variable (nom quelconque) contenant la connexion.
La fonction open possède 2 arguments :
- le chemin vers le fichier ;
- le mode d’ouverture :'r' pour read (lecture), 'w' pour write (écriture), 'a' pour append (ajout).
Fermeture du fichier : fic.close().
Ouverture et lecture de fichiers texte
7.
Trois méthodes pour lire un fichier et traiter les caractères spéciaux (méthode strip())
Tester les instructions suivantes en adaptant le chemin.
Retenir : read() = lecture d’un fichier « en bloc » (possible avec les fichiers de petite taille)
fic = open('U:\\Documents\\...\\fic0.txt','r') # 'r' = read => ouverture en mode lecture
texte = fic.read()
# Lecture de tout le fichier et stockage
fic.close()
# Fermeture du fichier. TRES IMPORTANT !
print(texte)
# Affichage
Puis, dans le shell, taper : texte.
# => Affichage de la chaîne
Retenir : readlines() = lecture de toutes les lignes d’un fichier (possible avec les fichiers de petite taille)
fic = open('U:\\Documents\\...\\fic0.txt','r')
liste = fic.readlines()
# Lecture de toutes les lignes et stockage dans une liste
fic.close()
print(liste)
# Le résultat est perfectible…
for l in liste:
print(l.strip())
# Parcours de la liste pour traitement
# Suppression des caractères spéciaux (\n = retour ligne)
PCSI – IPT G. Monod
TP_fichiers.docx
2/5
Retenir : readline() = lecture d’un fichier ligne par ligne (obligatoire avec les fichiers de grande taille)
fic = open('U:\\Documents\\...\\fic0.txt','r')
while 1 :
# Boucle … infinie ! Car 1 est toujours vrai.
ligne = fic.readline()
# Lecture d’une ligne
if ligne == "" :
# Si la ligne est vide…
break
# …on sort de la boucle
else :
# Sinon…
print(ligne.strip())
# On supprime les caractères spéciaux
fic.close()
# Fermeture
Rq: tester avec print(ligne) au lieu de print(ligne.strip()).
Dans la suite, l’instruction print() sera remplacée par des instructions de traitement des données.
Ouverture ou création d’un fichier texte et écriture
8.
9.
Deux méthodes pour écrire dans un fichier
Tester les instructions suivantes en changeant le nom de fichier en fic1.txt
Retenir : open(nom_fichier, 'w') + write() = création et écriture
fic = open('U:\\Documents\\...\\fic1.txt','w')
fic.write(' abcd\nefgh\n')
fic.close()
# 'w'=write
# Fichier contenant 2 lignes
Retenir : open(nom_fichier, 'a') + write() = ajout en fin de fichier
fic = open('U:\\Documents\\...\\fic1.txt','a')
fic.write('ijkl\nmno\n')
fic.close()
# 'a' = append
# Ajout de 2 autres lignes
Vérification : ouvrir le fichier créé à l’aide du bloc-notes ou l’afficher à l’aide de l’une des méthodes précédentes.
Application au traitement de données
Capteurs et programmes produisent des données. Un enjeu essentiel est l’échange de données entre programmes différents
car dans une chaîne de mesure ou un processus industriel, l’objectif visé est le traitement automatisé de l’information.
Retenir
Les fichiers textes (extension .txt ou .csv) permettent d’échanger des données entre de nombreux programmes (la sauvegarde
des données dans ce format est souvent disponible dans un menu du type « Fichier / Exporter des données » ou « Fichier /
Enregistrer sous… » en choisissant l’extension du fichier parmi une liste (.txt, .csv…).
En sciences, ces données prennent souvent la forme de couples, de triplets ou n-uplets de chaînes de caractères représentant
des nombres qui permettent de tracer des courbes (cf. exemples ci-dessous).
Ces fichiers texte sont constitués de lignes de tels n-uplets séparés par un caractère appelé « séparateur de colonnes ».
D’autre part, ces fichiers peuvent comporter des informations annexes (au début ou/et à la fin) sous forme de lignes
supplémentaires, en-têtes de colonnes par exemple ou bien date, nom du programme… qu’il convient de supprimer ou de
prendre en compte lors du traitement.
Exemples :
Exemple 1
Temps;E
0;9.25098970
3E-6;2.58623
6E-6;-5.39250
Ligne suppl.
Sép. colonne
Sép. décimal
1
«;»
«.»
Exemple 2
x,f,X
s,,s
-15.71,-0.000129,-5.0006
-15.58726,0.0077,-4.961580
2
«,»
«.»
-15,7
-15,5
-15,4
-15,3
Exemple 3
-0,00012
-5,000648
0,007724
-4,961580
0,015586
-4,922513
0,023337
-4,88344
0
« \t »
«,»
Retenir
Le séparateur décimal peut être le point ou la virgule.
Le séparateur de colonnes peut-être la virgule, le point-virgule ou une tabulation \t (ou un autre caractère).
La structure du fichier peut être déterminée très simplement en ouvrant le fichier avec le bloc-notes ou Notepad++.
Retenir
Python dispose de fonctions permettant transformer une ligne de tels fichiers en une liste de chaînes (type str) qu’il faudra donc
convertir en nombres en modifiant éventuellement le séparateur décimal :
- split() et split(';') détectent les colonnes marquées par des tabulations (ex 3) ou par des points-virgules (ex 1) ;
- replace(',','.') permet de modifier le séparateur décimal (remplacer la virgule par le point ici) ;
- float() permet de transformer les chaînes en flottants (cf. ci-dessous une méthode alternative utilisant numpy).
PCSI – IPT G. Monod
TP_fichiers.docx
3/5
Traitement de données texte avec Python et numpy
Méthode
import numpy as np
import matplotlib.pyplot as plt
data = []
fic = open(nom_fichier,'r')
while 1 :
ligne = fic.readline()
if ligne == "" :
break
else:
lg = ligne.split()
data.append(lg)
fic.close()
dataN = np.array(data,dtype=float)
# data = variable de stockage (liste) des lignes (
# Ouverture du fichier
# Boucle : lecture des lignes une par une
# Lecture d’une ligne et stockage dans la variable « ligne »
# Si ligne vide…
# … sortie de la boucle
# Sinon…
# Traitement (split, replace…) => lg = liste de chaînes
# Ajout d'une ligne à data => data = liste de listes = « matrice »
# Fermeture du fichier
# Transformation de data en tableau numpy de flottants
# data -> data[2 :] pour ignorer les 2 premières lignes si nécessaire
La variable dataN est un tableau de flottants.
Pour récupérer les données de la colonne k de ce tableau, l’instruction dataN[:,k] permet de sélectionner toutes les lignes
(signification des deux points) de la colonne k (cf. techniques de slicing).
Ce script est un modèle initial, à adapter à la structure particulière de chaque fichier.
Applications
10. Récupération d’un fichier de données Regressi (.txt) et tracé de graphes
10.1. Récupérer sur le réseau ou télécharger (sur pc.beharelle.fr, dans Info Sup PCSI / Fichiers) le fichier regressi.txt ou bien le
créer en utilisant l’annexe.
10.2. Visualiser la structure du fichier avec le bloc-notes ou Notepad++ et adapter le script ci-dessus si nécessaire.
Le fichier obtenu comporte 4 colonnes : la 1ère correspond au temps t et les trois autres sont des fonctions du temps t.
10.3. Écrire un script python permettant de récupérer les données et de représenter les trois fonctions en fonction du temps.
Rappel : import matplotlib.pyplot as plt puis plt.plot(liste_abscisses, liste_ordonnées) et enfin plt.show().
11. Récupération d’un fichier de données Excel (.csv) et tracé de graphes
11.1. Télécharger (sur pc.beharelle.fr, dans Info Sup PCSI / Fichiers) le fichier donnees.csv ou bien créer un tel fichier avec
Excel.
Le fichier obtenu comporte 4 colonnes : la 1ère correspond au temps t et les trois autres sont des fonctions du temps t (les
données sont les mêmes que les précédentes, seul le type de fichier a changé).
11.2. Visualiser la structure du fichier avec le bloc-notes ou Notepad++ et adapter le script ci-dessus si nécessaire.
11.3. Écrire un script python permettant de récupérer les données et de représenter les trois fonctions en fonction du temps.
Rq : il existe un module Python nommé csv dédié aux fichiers de ce type, néanmoins le script proposé permet de comprendre les
modifications à apporter afin d’adapter le script au format du fichier à lire (qui dépend du programme qui l’a créé).
12. Récupération d’un fichier de données Physics Toolbox Accelerometer (.csv) et tracé de graphes
Pour information, l’application est disponible sur : https://www.vieyrasoftware.net/
L’appli permet de mesurer l’accélération sur 3 axes, l’axe Oz étant l’axe orthogonal au plan du mobile orienté du haut vers le
bas lorsque le mobile est horizontal.
12.1. Télécharger (sur pc.beharelle.fr, dans Info Sup PCSI / Fichiers) le fichier chute0.csv issu d’une chute libre ou bien
télécharger et installer l’appli puis configurer l’appli de la façon suivante : dans le menu de configuration, pour l’option
« csv file delimiter character » choisir « Semicolon » puis transférer le fichier par mail ou toute autre méthode (wifi,
bluetooth…).
12.2. Visualiser la structure du fichier avec le bloc-notes ou Notepad++ et adapter le script ci-dessus si nécessaire.
12.3. Écrire un script python permettant de récupérer les données et de représenter ax, ay et az en fonction du temps.
13. Applications dans le cadre des projets de fin d’année
Enregistrer des pseudos et des scores en vue de classement, enregistrer les données nécessaires à un jeu (structure d’un
décor…)…
PCSI – IPT G. Monod
TP_fichiers.docx
4/5
Annexe : exportation de données avec Régressi
Créer un fichier (simulation) : Fichier / Nouveau / Simulation
Exporter : Fichier / Enregistrer sous :
PCSI – IPT G. Monod
TP_fichiers.docx
5/5
Téléchargement