Académique Documents
Professionnel Documents
Culture Documents
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 !
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
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é.
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
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
Début
Variable clt : client
//Création du fichier Clients.txt
Ouvrir "Clients.txt" en 1 en Ecriture
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.
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
• 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)
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.')