RI2 : Les fichiers texte

publicité
TS Spécialité ISN
Lycée Saint Dominique
2014/2015
RI2 : Les fichiers texte
1. Qu’est-ce qu’un fichier ?
Quand on souhaite stocker des données de façon persistantes, on les enregistre dans un fichier.
Un texte en ASCII ou en HTML, une image au format PBM, PGM ou PPM, un son de format RAW
ou MP3, un programme en Python ou en C, sont des exemples de données que l’on souhaite faire
persister.
Un fichier est simplement une suite de 0 et de 1 à laquelle on associe un nom. On peut stocker
cette suite de bits sur un périphérique, comme un disque ou une clé de mémoire flash (aussi
appelée clé USB). On peut également la stocker, via une connexion réseau, dans un espace
immatériel appelé « cloud » (l’ENT par exemple)
Pour un programme Python par exemple : tout ce qu’on tape directement dans le Shell est perdu
dès qu’on éteint l’ordinateur. C’est pour cela qu’on enregistre généralement les scripts auxquels
on tient, en leur donnant un nom du genre « mon_fichier.py ». L’extension détermine le type
d’information exprimé (texte, image, son…) et le format utilisé pour l’exprimer.
2. Organiser des fichiers
Quand un disque ou une clef de mémoire flash contient plusieurs fichiers, il est possible d’en afficher
la liste. La manière la plus courante de le faire est de représenter chaque fichier par une icône dans
une fenêtre, la forme de l’icône variant selon le format du fichier.
NB : on peut aussi faire afficher la liste des
fichiers par ordre alphabétique dans une
fenêtre de commande (fenêtre terminal),
grâce à la commande ls ou dir
Néanmoins, au bout de quelques dizaines de fichiers, on ne s’y retrouve plus ! Il est donc nécessaire
d’organiser ces fichiers. Une manière de faire est de les regrouper dans des dossiers. Par exemple :
un dossier Professionnel, un dossier Personnel, et à l’intérieur de chacun, des subdivisions selon les
domaines concernés. On appelle cela une organisation arborescente.
Dans cet arbre, le chemin d’un fichier est la
liste des noms des nœuds allant de la racine
de l’arbre jusqu’au fichier en question.
Par exemple, le
repertoire.py est :
chemin
du
fichier
/DISQUE/Pro/informatique/Répertoire/repertoire.py
Page 1 sur 8
TS Spécialité ISN
Lycée Saint Dominique
2014/2015
Exercice : Classez sous forme d’une arborescence les fichiers qui traînent dans votre répertoire personnel (sur
votre session du lycée)
Remarque : l’organisation arborescente n’est pas le seul moyen de structurer l’information. Elle est
en concurrence avec d’autre méthodes, parmi lesquelles l’utilisation de liens hypertextes (notion
inventée pour simplifier le mécanisme de référence dans une page web). Avec des liens hypertextes,
il est possible d’accéder à des fichiers sans savoir où ils se trouvent dans l’arborescence, simplement
en cliquant sur le lien.
On pourrait ainsi envisager de laisser toutes ses photos en vrac dans un dossier « photos », et créer
plusieurs pages web (l’une pour les photos d’anniversaire, l’autre pour les photos de vacances, ou…),
ainsi qu’une page « globale » récapitulant les liens permettant d’accéder à ces diverses pages. Cette
idée est à la base du Web, des logiciels de gestion de photos et des réseaux sociaux. On parle de
structure de graphe.
3. Comment utiliser un fichier ?
L’utilisation d’un fichier ressemble beaucoup à celle d’un livre. Pour utiliser un livre, on doit
d’abord le trouver (à l’aide de son titre), puis l’ouvrir. Lorsqu’on a fini de l’utiliser, on le referme.
Tant qu’il est ouvert, on peut y lire des informations diverses, et on peut aussi y écrire des
annotations, mais généralement on ne fait pas les deux à la fois. On peut se situer à l’intérieur du
livre, notamment en s’aidant des numéros de pages. On lit la plupart des livres en suivant l’ordre
normal des pages, mais on peut aussi décider de consulter n’importe quel paragraphe dans le
désordre. Tout cela s’applique aussi aux fichiers informatiques !
a. Noms de fichiers, répertoire courant
Lorsqu’on lance un script depuis la fenêtre d’un Shell IDLE, ce dernier se place par défaut dans un
répertoire courant. Sous Windows, la définition de ce répertoire courant fait partie des propriétés de
l’icône de lancement. On a généralement envie de choisir soi-même le répertoire courant afin qu’il
corresponde à ses attentes. Pour cela :

on commence par importer le module os, qui contient toute une série de fonctions
permettant de « dialoguer » avec le système.

On vérifie quel est actuellement le répertoire courant avec la commande getcwd()
Page 2 sur 8
TS Spécialité ISN
Lycée Saint Dominique

On force le changement de répertoire avec la commande chdir

On vérifie que le changement a bien été fait
2014/2015
Remarque sur l’importation d’un module de fonctions :
Dans l’exemple précédent, on a utilisé la commande import os, et ensuite, on a systématiquement
fait précéder les noms de fonctions du préfixe os. : os.getcwd() ou os.chdir()
Ceci permet d’être très précis dans l’appel de la fonction : on veut celle du module os, et pas une
autre ! L’inconvénient est d’alourdir un peu les notations. Une autre façon de procéder serait
d’importer toutes les fonctions avec la commande « from os import * ». Dans ce cas, on peut se
contenter d’appeler la fonction désirée sans préfixe. Voir ci-dessous :
Néanmoins, on ne RECOMMANDE PAS DU TOUT cette dernière méthode dans le cas du module os :
en effet, certaines fonctions de ce module risquent d’interférer avec des fonctions internes à Python
Page 3 sur 8
TS Spécialité ISN
Lycée Saint Dominique
2014/2015
(typiquement, la fonction open qu’on va utiliser un peu plus loin). Il vaut mieux importer le module
os, puis écrire le préfixe avant les fonctions dont on a besoin (quelques-une, pas plus).
b. Ecriture séquentielle dans un fichier
Sous Python, l’accès aux fichier est assuré par l’intermédiaire d’un « objet-fichier », que l’on crée à
l’aide de la fonction open(). Après cela, on peut lire et écrire dans le fichier en utilisant les méthodes
spécifiques de cet « objet-fichier ».
Si le fichier n’existait pas déjà, il est créé automatiquement. S’il existait déjà et contenait des
données, celles qu’on y enregistre viendront s’ajouter à la suite des précédentes.
Testez avec l’exemple suivant :
 La première ligne crée « l’objet-fichier », lequel fait référence à un fichier véritable dont le
nom est mon_fichier_test et qui est rangé par défaut dans le répertoire courant. Allez donc
voir s’il y a bien été créé ! Ouvrez-le avec un éditeur de textes quelconque.
NE CONFONDEZ PAS LE NOM DU FICHIER AVEC CELUI DE L ’OBJET-FICHIER QUI Y DONNE ACCES !!
 La fonction open() attend 2 arguments qui doivent être des chaînes de caractère (entre
guillemets ou entre apostrophes). Le premier argument est le nom du fichier à ouvrir, le
second indique le mode d’ouverture. Le ‘a’ signifie : « mode ajout » (append) ; les données à
enregistrer doivent être ajoutées à la suite de celles qui s’y trouveraient éventuellement
déjà. On aurait pu utiliser le mode ‘w’ (mode « write ») mais dans ce cas, si le fichier
contenait déjà des données, Python les aurait écrasées en recommençant du début.
 La méthode write() est une méthode attachée à l’objet-fichier : c’est pour cela qu’on
l’appelle en tapant d’abord le nom de cet objet suivi d’un point. Elle réaliser l’écriture
proprement dite. Les données fournies en argument sont écrites à la suite les unes des
autres. Chaque nouvel appel de « write() » continue l’écriture à la suite de ce qui est déjà
enregistré.
 La méthode close() referme le fichier, qui est désormais disponible pour un autre usage.
c. Lecture séquentielle d’un fichier
On peut maintenant rouvrir le fichier, mais cette fois en mode lecture, pour y relire les informations
entrées précédemment.
Page 4 sur 8
TS Spécialité ISN
Lycée Saint Dominique
2014/2015
On voit que la méthode read() lit les données présentes dans le fichier, et les transfère dans une
variable de type string (ici la variable t). Si on ne spécifie aucun d’argument à read(), la totalité du
fichier est transférée.
REMARQUES :
 Attention à ne pas se tromper dans le nom du fichier à ouvrir. Ici, c’était
« mon_fichier_test ». Si le fichier n’existe pas, on obtient un message d’erreur
En revanche, on peut choisir le nom que l’on veut pour l’objet-fichier (ici, on a choisi « ofi »).
C’est une simple variable de stockage, pas un fichier « réel ».
 Les deux chaînes de caractère que nous avions rentrées sont accolées en une seule. C’est
normal, car nous n’avions fourni aucun caractère de séparation quand nous les avions
enregistrées. On verra plus tard comment faire cela.
 La méthode read() peut également être appelée avec un argument, qui indique combien de
caractères doivent être lus, à partir de la position déjà atteinte dans le fichier.
S’il ne reste pas assez de caractères, Python s’arrête à la fin du fichier. Si la fin du fichier
était déjà atteinte, Python renvoie une chaîne vide.
d. Fichiers texte
Un fichier texte contient des caractères imprimables et de espaces organisés en lignes successives,
ces lignes étant séparées les unes des autres par un caractère spécial non-imprimable appelé
« marqueur de fin de ligne ».
Il est très facile de traiter ce genre de fichiers sous Python. Par exemple, les instructions suivantes
créent un fichier texte de quatre lignes :
Page 5 sur 8
TS Spécialité ISN
Lycée Saint Dominique
2014/2015
Le marqueur de fin de ligne est …………
Lors de la lecture, les lignes d’un fichier texte peuvent être extraites séparément les unes des autres.
 La méthode readline() ne lit qu’une ligne à la fois (en incluant le caractère de fin de ligne)
Attention à ouvrir le fichier en mode lecture « r » et surtout pas en mode « w » , sinon non
seulement vous ne pourrez pas utiliser readline, mais en plus, le système va écraser l’ancien
fichier « mon_fichier_texte » et en créer un nouveau… vide !
 La méthode readlines() transfère toutes les lignes restantes dans une LISTE de chaînes de
caractères.
Cette liste apparaît en format « brut », avec les apostrophes autour des chaînes, et les
caractères spéciaux. On peut évidemment parcourir cette liste si besoin (avec une boucle
while), pour en extraire les chaînes individuelles.
4. Activités et mini-projets
Page 6 sur 8
TS Spécialité ISN
Lycée Saint Dominique
2014/2015
Vérifier le résultat en ouvrant le fichier texte créé !
Page 7 sur 8
TS Spécialité ISN
Lycée Saint Dominique
2014/2015
Page 8 sur 8
Téléchargement