Vous êtes sur la page 1sur 39

ROYAUME DU MAROC

‫مكتب التكوين المهني وإنعاش الشغل‬


office de la formation professionnelle et de la promotion du travail

ISMONTIC TANGER

Module102 : PROGRAMMATION
STRCUTUREE

Fichiers
Introduction
Imaginons que l’on veuille écrire un programme gérant un carnet
d’adresses. D’une exécution du programme à l’autre, l’utilisateur doit
pouvoir retrouver son carnet à jour, avec les modifications qu’il y a
apportées la dernière fois qu’il a exécuté le programme. Les données du
carnet d’adresse ne peuvent donc être inclues dans l’algorithme, et
encore moins être entrées au clavier à chaque nouvelle exécution !

Les fichiers sont là pour combler ce manque.

Un fichier (file) est un ensemble structuré de données de même type


stocké en général sur un support externe (disque dur, disque optique,
flash disque, ...) de manière permanente pour les réutiliser
ultérieurement.
Définition
Type de fichiers
Le critère important qui différencie les fichiers est la façon dont les informations sont
organisées sur ces derniers.

Les fichiers textes


Un fichier texte est formé de caractères ASCII, organisé en ligne, chacune se termine par
un caractère de contrôle de fin de ligne.
Si chaque ligne contient le même genre d'informations, les lignes sont appelées des
enregistrements (Structures).

Les fichiers binaires


 Un fichier binaire contient des données non textuelles. Il n'est pas organisé sous
forme d'enregistrement. Les fichiers binaires ne prennent sens que s'ils sont traités
par un programme adapté.
Par exemple un fichier son, une vidéo, une image, un programme exécutable, etc.
 Dans les fichiers binaires, les données sont écrites à l'image exacte de leur codage en
mémoire. Ceci facilite l'accès à ce type de fichier et le rend rapide
OUVERTURE ET FERMETURE
 Un programme doit pouvoir lire les informations contenues dans un fichier,
les modifier, en ajouter d'autres et en supprimer.

 Avant de pouvoir travailler sur un fichier, il faut l'ouvrir. Cette opération


consiste à établir un lien entre le fichier et le programme : le système
d'exploitation recherche le fichier et renvoie son adresse au programme (en
simplifiant).

 Toutes les modifications qui sont faites ensuite sur le fichier (modification,
ajout, suppression) ne sont pas répercutées immédiatement sur le fichier, pour
des raisons de temps d'accès disques. Par conséquent lorsque l'on quitte le
programme avant que toutes les mises à jour aient été effectuées, le fichier
risque d'être endommagé car incohérent. Pour éviter ce désagrément, il faut
explicitement demander au système d'exploitation d'effectuer les mises à jour
: cela se fait en fermant le fichier.
MODE D'ACCES: Organisation des fichiers

 On peut ouvrir un fichier dans le but de lire les informations qu’il


contient (ouverture en lecture seule),
 ou pour en modifier certaines (ouverture en écriture) ou les
deux (ouverture en lecture/écriture).

 On peut également l’ouvrir dans le but d’ajouter des


enregistrements (ouverture en ajout).

NB: on doit lors de l’ouverture du fichier préciser le mode d’accès.


Types d'accès aux fichiers
Le type d'accès est la technique que la machine doit suivre pour
aller chercher les informations contenues dans un fichier.
Les données dans les fichiers peuvent être rangées et donc
retrouvées de différentes manières

On distingue trois types d'accès aux fichiers


 L'accès séquentiel
 L'accès direct
 L'accès indexé
Types d'accès aux fichiers
L'accès séquentiel :
Dans un fichier séquentiel, les données sont rangées les unes derrière les autres, dans
l’ordre où elles sont saisies. On les retrouve en balayant le fichier dans l’ordre du
premier enregistrement au dernier..
pour atteindre l’article de rang n, il est nécessaire de parcourir les (n-1) articles
précédents.

Remarques :
 La fin du fichier est repérée par un marqueur de fin du fichier.
 Pour ajouter une information, il faut que la tête de lecture/écriture se place en face
du marqueur d fin de fichier.
Types d'accès aux fichiers
L'accès direct
Ce type d'accès consiste à se placer directement sur l'information souhaitée sans
parcourir celles qui la précèdent, en précisant la position de l'élément recherché.
Dans un fichier direct, les enregistrements sont repérés par un numéro. Il peuvent être
stockés et lus dans n’importe quel ordre, à condition de connaitre le numéro
d’enregistrement
L'indication d'un numéro permet donc un accès direct et rapide à l'information ainsi
référencée.
Types d'accès aux fichiers
L'accès séquentiel indexé
Ce type d'accès combine la rapidité de l'accès direct et la simplicité de l'accès
séquentiel. Il est particulièrement adapté au traitement des gros fichiers, comme les
bases de données.
Dans l’organisation séquentielle indexée, on doit définir dans l’enregistrement une
information qui l’identifie de manière unique
(par exemple le nom si il n’y a pas d’homonymes). Cette information s’appelle la CLÉ ou
INDEX. Il suffira de connaitre cette clé pour retrouver une information.
Lors de l’ajout d’un enregistrement une erreur se produit si un enregistrement existe
déjà avec la même clé.

Un fichier séquentiel indexé est en fait composé de deux fichiers :


• le fichier de données (en général .dat)
• le fichier d’index (en général .idx).
Types d'accès aux fichiers
L'accès séquentiel indexé
Le fichier d’index contient toutes les clés triées dans l’ordre avec pour chacune
d’elles le numéro d’enregistrement associé.

On parcourt un index pour rechercher une clef. On obtient ainsi l'adresse exacte de l'information
recherchée.
On peut utiliser des opérateurs de comparaisons sur les index (=, <>, <, <=, >, >=). Il est alors
possible, par exemple, de retrouver rapidement toutes les personnes de plus de 18 ans.
Dans l'exemple schématisé ci-dessus, on pourrait, grâce aux index, retrouver rapidement des livres
à partir de leur auteur, de leur titre ou de leur thème.
Traitement séquentiel des fichiers texte
Ouvrir et fermer un fichier
Ouvrir un fichier texte
Lorsqu'on désire accéder à un fichier, il est nécessaire avant tout accès, d'ouvrir le fichier.

Syntaxe :
Ouvrir Nom_du_fichier en Mode
Exemple :
Ouvrir "fiche.txt" en Lecture
Nom_du_fichier : c'est le nom physique du fichier
Mode : Il existe trois modes d'ouverture du fichier texte :
Lecture : permet d'ouvrir le fichier en lecture seul.
Écriture : indique son accès en écriture. Dans ce mode, un nouveau fichier est toujours
créé. Si le fichier existe déjà, il est réinitialisé à vide et son contenu précédent est perdu
Ajout : permet d'ajouter des données à un fichier séquentiel existant en conservant le
contenu précédent.
Traitement séquentiel des fichiers texte

Fermer un fichier texte


Une fois qu'on a terminé avec un fichier, il ne faut pas oublier de le
fermer.

Syntaxe :
Fermer(Nom_du_fichier)

Note :
Lorsqu'un fichier doit subir plusieurs interventions nécessitant plusieurs
ouvertures, il sera nécessaire de fermer le fichier avant de le re-ouvrir.
Lire et écrire dans un fichier

Exercice : Fichier Clients.txt


Écrire un algorithme permettant de créer un fichier Clients.txt puis
saisir les informations du 1er client et de les écrire dans ce fichier.

Soit un fichier texte contenant des données organisées dans des


enregistrements de longueur fixe.
Corrigé
lecture et l'écriture dans ce fichier exigent la déclaration de la structure suivante :
//Déclaration de la structure client
Type client : Structure
Nom : chaîne * 25
Prénom : chaîne * 25
Ville : chaîne * 15
Tel : chaîne * 10
FinStructure

Début
Variable clt : client
//Création du fichier Clients.txt
Ouvrir "Clients.txt" en 1 en Ecriture

//Affectation de données aux champs de la structure


Clt.Nom ← "Mahboub"
Clt.Prénom ← "Khadija"
Clt.Ville ← "Agadir"
Clt.Tel ← "028435867«
//Ecrire dans le fichier
EcrireFichier 1,Clt
//Fermeture du fichier
Fermer(1)
Fin
Les fichiers en python
Eléments attachés à un fichier
 On appelle nom interne d’un ficher le nom sous lequel un
fichier est identifié dans un programme.
 On appelle nom externe d’un fichier le nom sous lequel le
fichier est identifié en mémoire secondaire.
Ce nom est composé de trois parties:
• l’identifiant du support
• le nom du fichier proprement dit
• une extension (ou suffixe) qui précise le genre du fichier
(donnée, texte, programme, etc.)

Exemple:
« D:nombres.dat » désigne un fichier de données stocké sur le
disque D et qui s’appelle nombres.
Eléments attachés à un fichier
On appelle tampon ou buffer d’un fichier, une zone de la
mémoire principale pouvant contenir un enregistrement du
fichier.
Un fichier possède toujours un enregistrement
supplémentaire à la fin appelé marque de fin de fichier
(FDF) permettant de le borner
Les fichiers
Noms de fichiers – le répertoire
Les fichiers crées et/ou recherchés par Python seront dans le répertoire courant.
Celui-ci est habituellement le répertoire ou se trouve le script lui-même, sauf si vous
lancez ce script depuis la fenêtre d’un Shell IDLE, auquel cas le répertoire courant est
défini au lancement de IDLE lui-même.
• Pour connaître le répertoire courant, vous exécuter le script suivant:
import os
rep_cour = os.getcwd()
print(rep_cour)
• La première ligne de cet exemple importe l’intégralité du module os, lequel
contient de nombreuses fonctions intéressantes pour l’accès au système
d’exploitation.
• La seconde ligne utilise la fonction getcwd() du module os. Comme vous pouvez
le constater, la fonction getcwd() renvoie le nom du répertoire courant
(getcwd = get current working directory).
Les fichiers
Editer un fichier
 Sous Python, l’accès aux fichiers est assuré par l’intermédiaire
 d’un objet-interface particulier, que l’on appelle objet-fichier.
 On crée cet objet à l’aide de la fonction intégrée open().
 Celle-ci renvoie un objet doté de méthodes spécifiques, qui vous permettront de lire et
écrire dans le fichier.

La fonction open
# Voici la syntaxe pour lire un fichier
monfichier = open(« c:\data.txt", "r")
print (monfichier)
<open file 'data.txt', mode 'r' at 0x7ff6cf3fe4b0>
On remarque que le deuxième paramètre est renseigné par un r , ce paramètre indique
une ouverture de fichier en lecture
Les types d'ouverture
Il existe plusieurs modes d'ouverture:
 'r' pour une ouverture en lecture (READ).
 'w' pour une ouverture en écriture (WRITE), à chaque
ouverture le contenu du fichier est écrasé. Si le fichier
n'existe pas python le crée.
 'a' pour une ouverture en mode ajout à la fin du fichier
(APPEND). Si le fichier n'existe pas python le crée.
 'b' pour une ouverture en mode binaire.
 't' pour une ouverture en mode texte.
 'x' crée un nouveau fichier et l'ouvre pour écriture
Fermeture d'un fichier
Comme tout élément ouvert, il faut le refermer une fois les
instructions terminées.

Pour cela on utilise la méthode close() .


monfichier.close()
Écriture séquentielle dans un fichier
obFichier = open('Monfichier','a')
obFichier.write('Bonjour, Stagiaires de Dev!')
obFichier.write("Quel beau temps, aujourd'hui !")
obFichier.close()

 La fonction open() attend deux arguments, qui doivent tous deux être des
chaînes de caractères.
 Le premier argument est le nom du fichier à ouvrir, et le second est le mode
d’ouverture. ‘a’ indique qu’il faut ouvrir ce fichier en mode « ajout » (append),
ce qui signifie que les données à enregistrer doivent être ajoutées à la fin du
fichier, à la suite de celles qui s’y trouvent éventuellement déjà.
 Nous aurions pu utiliser aussi le mode 'w' (pour write), mais lorsqu’on utilise
ce mode, Python crée toujours un nouveau fichier (vide), et l’écriture des
données commence à partir du début de ce nouveau fichier.
Écriture séquentielle dans un fichier
obFichier = open('Monfichier','a')
obFichier.write('Bonjour, Stagiaires de Dev!')
obFichier.write("Quel beau temps, aujourd'hui !")
obFichier.close()
 La méthode write() réalise l’écriture proprement dite. Les données à écrire
doivent être fournies en argument. Ces données sont enregistrées dans le
fichier les unes à la suite des autres (c’est la raison pour laquelle on parle de
fichier à accès séquentiel).
 Chaque nouvel appel de write() continue l’écriture à la suite de ce qui est
déjà enregistré.
 A noter que pour le monde d'ouverture 'a' , si vous voulez écrire à la ligne,
vous pouvez utiliser le saut de ligne \n
 La méthode close() referme le fichier. Celui-ci est désormais disponible pour
tout usage.
Écriture séquentielle dans un fichier

Pour créer un fichier texte de quatre lignes :

obFichier =open("FichierTexte", "w")


obFichier.write("Ceci est la ligne un\nVoici la ligne
deux\n")
obFichier.write("Voici la ligne trois\nVoici la ligne
quatre\n")
obFichier.close()

• Notez bien le marqueur de fin de ligne \n inséré dans les chaines


de caractères, aux endroits ou l’on souhaite séparer les lignes de texte
dans l’enregistrement.
Lecture séquentielle dans un fichier
• Nous allons rouvrir le fichier, mais cette fois en lecture, de manière à
pouvoir y relire les informations que nous avons enregistrées dans
l’étape précédente :
obFichier = open('Monfichier', 'r')
t = obFichier .read()
print(t)
obFichier.close()

• La méthode read() lit les données présentes dans le fichier et les transfère dans
une variable de type chaine de caractères (string) .
• Nous ne sommes tenus à aucune obligation concernant le nom à choisir pour
l’objet-fichier. C’est un nom de variable quelconque. Ainsi donc, dans notre
première instruction, nous avons choisi de créer un objet-fichier obFichier ,
faisant référence au fichier réel Monfichier, lequel est ouvert en lecture
(argument ’r’).
Lecture séquentielle dans un fichier
• La méthode read() peut également être utilisée avec un argument. Celui-
ci indiquera combien de caractères doivent être lus, à partir de la
position déjà atteinte dans le fichier.

• Exemple
obFichier = open('Monfichier', 'r')
t = obFichier .read(5)
print(t)
t = obFichier .read(15)
print(t)

N’oubliez pas de refermer le fichier après usage :


obFichier.close()
Parcourir un fichier
Après avoir ouvert un fichier, il existe différentes méthodes pour le parcourir :
 la méthode `read()` retourne tout le contenu du fichier dans une variable de type
string
contenu = fichier.read()

 la méthode `readline()` retourne la première ligne du fichier lors de son premier


appel, la seconde ligne à son second appel, la troisième, etc.
ligne1 = fichier.readline() # ligne1
ligne2 = fichier.readline() # ligne 2
- la méthode readlines()` retourne toutes les lignes du fichier dans une
variable de type `list`
liste_lignes = fichier.readlines()
 la boucle for, c'est la plus efficace pour parcourir de très gros fichiers, elle s'utilise
directement sur l'objet
for ligne in monnfichier:
[…]
Le mot clé with
Il existe une autre syntaxe plus courte qui permet de
s'emanciper du problème de fermeture du fichier: le mot
clé with .
Voici la syntaxe:
with open("data.txt", "r") as monfichier:
print monfichier.read()
Ouvrir deux fichiers avec l'instruction with

On peut avec l'instruction with ouvrir deux fichiers (ou plus) en


même temps.Voyez l'exemple suivant :

with open("zoo1.txt", "r") as fichier1, open("zoo2.txt", "w") as


fichier2:
for ligne in fichier1:
fichier2.write("* " + ligne)
Exercice 1
Avant de passer à un exemple concret, créez un fichier dans un éditeur de
texte que vous enregistrerez dans votre répertoire courant avec le nom
zoo.txt et le contenu suivant :

girafe
tigre
singe
Souris
1. créer une fonction NbrLigne qui a pour paramètre le nom d'un fichier (texte) et
qui renvoie le nombre de lignes de ce fichier
2. Ajouter la ligne « vache » dans le fichier zoo.txt
# En utilisant for # autre methode en utilisant les fonctions
fichier=open(‘g:\zoo.txt','r') def lig (fichier):
i=0 i=0
for ligne in fichier: ch = fichier.readline()
i+=1 print (ch)
fichier.close() while ch != "":
print (i) i+=1
ch = fichier.readline()
fichier.close()
# autre methode en utilisant return i
readline() fichier=open('moo.txt','r')
print(lig(fichier))
fichier=open('c:\zoo.txt','r')
i=0
ch = fichier.readline()
while ch != "": Ajout element
i+=1 fichier=open('c:\zoo.txt','a')
ch = fichier.readline() animal = input("entrel l animal")
fichier.close() fichier.write('\n'+animal)
print (i) fichier.close()
Exercice2: Moyenne des notes
1) Créer le fichier « etudiants.txt » contient des étudiants et le fichier « notes.txt »
contient les notes obtenues par ces étudiants
2) Chaque ligne du fichier ne contient qu'une note et enregistrez-le dans votre
répertoire de travail.
3) Créez un script Python qui lit chaque ligne de fichier « notes.txt », et extraire les
notes sous forme de float et les stocker dans une liste.
4) Terminez le script en calculant et affichant la moyenne de la classe avec deux
décimales.
5) Créer un dictionnaire qui a comme clé le nom d étudiant prévenant de fichier
« etudiants.txt », et comme valeur la note prévenant du fichier « notes.txt »
6) faire le script qui réécrira les notes dans le fichier « decision.txt » avec une note par
ligne suivie de « décision» et le nom d étudiant
si la note est inférieure à 9, la décision est « redoublant»
si la note est entre 9 et 10, la décision est « racheté»
Sisi la note est superieure à 10, la décision est « admis»
Toutes les notes seront écrites avec une décimale. À titre d'exemple, voici les 3 premières lignes
attendues pour le fichier notes2.txt :
Ali: 17.5 admis said: 9.5 racheté fati: 8.5 redoublant
#question1
F_etudiants = open("etudiants.txt", "w")
F_notes = open("notes.txt", "w")
nb_et = int(input("entrez le nombre d'etudiants: "))
for i in range(nb_et):
F_etudiants.write(input("entrez le nom: ") + "\n") F_notes.write(str(input("entrez la note:
")) +"\n")
F_etudiants.close()
F_notes.close()

Ou
F_etudiants = open("etudiants.txt", "w")
F_notes = open("notes.txt", "w")
rep ="oui"
while (rep =="oui"):
etud = input("entrer etudiant")
F_etudiants.write(etud+'\n)
note =input("entrer note")
F_notes.writ('note+'\n’)
rep = input("voulez vous continuer(oui/non)")
F_etudiants.close()
F_notes.close()
F_etudiants = open("etudiants.txt", "r")
F_notes = open("notes.txt", "r")
print (F_etudiants.read())
Affichage les éléments du
print (F_notes.read()) fichier
F_etudiants.close()
F_notes.close()
notes =[]
fnotes=open('notes.txt','r') 2)
i=0 dnotes ={}
ch = fnotes.readline() note = 0,0
print (ch) with open("notes.txt", "r") as fnotes,
while ch != "": open("etudiants.txt", "r") as fetud:
n = float(ch) note = fnotes.readline()
notes.append(n) etud = fetud.readline()
print (len(notes)) while note != "" and etud != "":
print (notes) dnotes[etud] = note
ch = fnotes.readline() note = fnotes.readline()
fnotes.close() etud = fetud.readline()
print (notes) fnotes.close()
s=0 fetud.close()
for i in range(0,len(notes)): print (dnotes)
s = s+ notes[i]
m = s/len(notes)
print (s)
print (m)
Opérations sur les fichiers et dossiers
Le module os contient toute une série de fonctions permettant de
dialoguer avec le système d'exploitation (os = operatingsystem),
se placer dans un dossier
import os
os.chdir('/chemin/dossier/')
Récupérer le répertoire de travail
import os
chemin = os.getcwd()
Lister le contenu d'un dossier
import os
liste = os.listdir('/chemin/dossier/')
Renommer un fichier ou un dossier
import os
os.rename('ancien_nom.txt', 'nouveau_nom.txt')
Supprimer un fichier
import os
os.remove('fichier.txt')
Créer un dossier
import os
os.mkdir('/chemin/dossier_vide/')
Supprimer un dossier vide
import os
os.rmdir('/chemin/dossier_vide/')
Supprimer un dossier et son contenu
import shutil
shutil.rmtree('/chemin/dossier/')
Tests sur les fichiers et dossiers
Vérifier si le fichier ou dossier existe
import os
if os.path.exists('/chemin/fichier.txt'):
print('Le fichier existe.')

Vérifier s'il s'agit d'un fichier


import os
if os.path.isfile('/chemin/fichier.txt'):
print("L'élément est un fichier.")

Vérifier s'il s'agit d'un dossier


import os
if os.path.isdir('/chemin/dossier/'):
print("L'élément est un dossier.")
Tests sur les fichiers et dossiers

Vérifier s'il s'agit d'un lien


import os
if os.path.islink('/chemin/symlink'):
print("L'élément est un lien.")

Vérifier s'il s'agit d'un point de montage


import os
if os.path.ismount('/chemin/mount_point/'):
print("L'élément est un point de montage.")

Vous aimerez peut-être aussi