4SI
Résumé du chapitre. Cours complet, exercices et quiz : Les fichiers — 4SI.
Aller à :
Fichiers texte
1. Définition et caractéristiques
Un fichier texte est un fichier séquentiel constitué d’une suite de lignes, chaque ligne étant une chaîne de caractères.
Chaque ligne se termine par le caractère spécial "\n" (retour à la ligne).
Un fichier texte permet de stocker des informations permanentes sous une forme lisible par l’homme (caractères, chiffres, symboles).
Les valeurs numériques y sont enregistrées sous forme textuelle.
2. Ouverture et modes d’accès
| Mode | Signification | Usage |
|---|---|---|
"r" | Lecture | Lire un fichier existant |
"w" | Écriture | Créer ou remplacer un fichier |
"a" | Ajout | Ajouter du texte à la fin du fichier |
Exemple :
f = open("notes.txt", "r")
ouvre le fichier physique notes.txt en lecture.
3. Parcourir un fichier texte
def parcourir_texte(nom_fichier):
f = open(nom_fichier, "r")
ligne = f.readline()
while ligne != "":
ligne = ligne[:len(ligne)-1]
# traitement sur la ligne
ligne = f.readline()
f.close()
N.B. : Le retrait
ligne[:len(ligne)-1]suppose que chaque ligne, y compris la dernière, se termine par"\n". C’est le cas de tout fichier rempli avecf.write(ch + "\n").
4. Afficher le contenu
a) Affichage total
def afficher_total(nom_fichier):
f = open(nom_fichier, "r")
contenu = f.read()
print(contenu)
f.close()
b) Affichage selon condition
def afficher_selon_condition(nom_fichier):
f = open(nom_fichier, "r")
ligne = f.readline()
while ligne != "":
ligne = ligne[:len(ligne)-1]
if (condition sur la ligne):
print(ligne)
ligne = f.readline()
f.close()
5. Remplir un fichier texte
a) Nombre de lignes connu
def remplir_texte(nom_fichier, n):
f = open(nom_fichier, "w")
for i in range(n):
ch = input("Donner une ligne : ")
f.write(ch + "\n")
f.close()
b) Nombre de lignes inconnu
def remplir_texte(nom_fichier):
f = open(nom_fichier, "w")
rep = "O"
while rep == "O":
ch = input("Donner une ligne : ")
f.write(ch + "\n")
rep = input("Ajouter une autre ligne O/N ? ")
while not (rep == "O" or rep == "N"):
rep = input("Répondez par O ou N : ")
f.close()
6. Compter les lignes
def nombre_lignes(nom_fichier):
f = open(nom_fichier, "r")
n = 0
ligne = f.readline()
while ligne != "":
n = n + 1
ligne = f.readline()
f.close()
return n
7. Rechercher une chaîne
def rechercher_chaine(nom_fichier, motif):
f = open(nom_fichier, "r")
trouve = False
ligne = f.readline()
while (ligne != "") and (not trouve):
ligne = ligne[:len(ligne)-1]
if (condition de recherche):
trouve = True
else:
ligne = f.readline()
f.close()
return trouve
8. Supprimer les lignes égales à une chaîne
from numpy import array
def supprimer_ligne(nom_fichier, ligne_sup):
f = open(nom_fichier, "r")
t = array([str]*100)
n = 0
ligne = f.readline()
while ligne != "":
ligne = ligne[:len(ligne)-1]
if ligne != ligne_sup:
t[n] = ligne
n = n + 1
ligne = f.readline()
f.close()
f = open(nom_fichier, "w")
for i in range(n):
f.write(t[i] + "\n")
f.close()
N.B. : Le tableau
test déclaré pour 100 lignes au plus : un fichier plus long provoque une erreur (IndexError). On adapte cette taille à la borne donnée par l’énoncé.
N.B. :
array([str]*100)etarray([""]*100, dtype='U50')conservent les chaînes entières. Attention àarray([str()]*100),array([""]*100)etarray([""]*100, dtype=str): ces trois écritures tronquent chaque chaîne à un seul caractère.
9. Trier les lignes
from numpy import array
def trier_fichier_texte(nom_fichier):
f = open(nom_fichier, "r")
t = array([str]*100)
n = 0
ligne = f.readline()
while ligne != "":
t[n] = ligne[:len(ligne)-1]
n = n + 1
ligne = f.readline()
f.close()
trier_tableau(t,n)
f = open(nom_fichier, "w")
for i in range(n):
f.write(t[i] + "\n")
f.close()
N.B. :
trier_tableau(t, n)désigne n’importe quelle méthode de tri vue en cours (sélection, bulles, insertion), appliquée auxnpremières cases du tableau.
Points essentiels — fichiers texte
- Un fichier texte contient des chaînes de caractères
- Chaque ligne se termine par
"\n" - Lecture séquentielle avec
readline() - Suppression du retour avec
ligne[:len(ligne)-1] - Toujours fermer le fichier avec
f.close()
Fichiers binaires
1. Définition
Un fichier binaire est un fichier séquentiel d’éléments en forme binaire.
Chaque élément peut être :
- une valeur simple (entier, réel, chaîne, booléen)
- un enregistrement (structure avec plusieurs champs)
Remarque : Dans le programme tunisien, tous les éléments d’un fichier binaire sont du même type.
from pickle import dump, load
2. Modes d’accès
| Mode | Signification | Usage |
|---|---|---|
"rb" | Lecture binaire | Lire un fichier binaire |
"wb" | Écriture binaire | Créer ou remplacer |
"ab" | Ajout binaire | Ajouter à la fin |
f = open("eleves.dat", "rb")
3. Remplir un fichier
a) Nombre d’éléments connu
from pickle import dump
def remplir_binaire(nom_fichier, n):
f = open(nom_fichier, "wb")
for i in range(n):
e = dict()
e['np'] = input("Nom et prénom : ")
e['moy'] = float(input("Moyenne : "))
dump(e, f)
f.close()
b) Nombre d’éléments inconnu
from pickle import dump
def remplir_binaire(nom_fichier):
f = open(nom_fichier, "wb")
rep = "O"
while rep == "O":
e = dict()
e['np'] = input("Nom et prénom : ")
e['moy'] = float(input("Moyenne : "))
dump(e, f)
rep = input("Ajouter un élève O/N ? ")
while not (rep == "O" or rep == "N"):
rep = input("Répondez par O ou N : ")
f.close()
4. Parcourir un fichier
from pickle import load
def parcourir_binaire(nom_fichier):
f = open(nom_fichier, "rb")
fin = False
while not(fin):
try:
e = load(f)
# traitement sur e
except:
fin = True
f.close()
Remarque : Le bloc
exceptintercepte toutes les erreurs, et pas seulement la fin du fichier. Une erreur dans le traitement, un champ mal nommé par exemple, arrête la boucle sans aucun message : si le parcours s’arrête trop tôt, c’est là qu’il faut chercher.
5. Afficher le contenu
from pickle import load
def afficher_binaire(nom_fichier):
f = open(nom_fichier, "rb")
fin = False
while not(fin):
try:
e = load(f)
# affichage selon le type
except:
fin = True
f.close()
6. Afficher selon condition
from pickle import load
def afficher_selon_condition(nom_fichier):
f = open(nom_fichier, "rb")
fin = False
while not(fin):
try:
e = load(f)
if (condition sur e):
# affichage
except:
fin = True
f.close()
7. Rechercher un élément
from pickle import load
def rechercher_binaire(nom_fichier, valeur):
f = open(nom_fichier, "rb")
fin = False
trouve = False
while not(fin) and not(trouve):
try:
e = load(f)
if (condition de recherche):
trouve = True
except:
fin = True
f.close()
return trouve
8. Supprimer un élément
from pickle import dump, load
from numpy import array
def supprimer_binaire(nom_fichier, condition_sup):
f = open(nom_fichier, "rb")
t = array([dict()]*100)
n = 0
fin = False
while not(fin):
try:
e = load(f)
if not (condition_sup sur e):
t[n] = e
n = n + 1
except:
fin = True
f.close()
f = open(nom_fichier, "wb")
for i in range(n):
dump(t[i], f)
f.close()
N.B. : Le tableau
test déclaré pour 100 éléments au plus : un fichier plus long provoque une erreur (IndexError). On adapte cette taille à la borne donnée par l’énoncé.
9. Trier les éléments
from pickle import dump, load
from numpy import array
def trier_fichier_binaire(nom_fichier):
f = open(nom_fichier, "rb")
t = array([dict()]*100)
n = 0
fin = False
while not(fin):
try:
t[n] = load(f)
n = n + 1
except:
fin = True
f.close()
trier_tableau(t,n)
f = open(nom_fichier, "wb")
for i in range(n):
dump(t[i], f)
f.close()
N.B. :
trier_tableau(t, n)désigne n’importe quelle méthode de tri vue en cours (sélection, bulles, insertion), appliquée auxnpremières cases du tableau. La comparaison porte sur un champ, par exemplet[i]['moy'], et non sur l’enregistrement entier.
Points essentiels — fichiers binaires
- Un fichier binaire contient des éléments de même type
- Écriture et lecture avec
dump()etload() - Parcours séquentiel avec
try/except - Toujours fermer avec
f.close()
Pour aller plus loin : le cours complet, les exercices corrigés et le quiz dans Les fichiers — 4SI.

