Vous êtes sur la page 1sur 13

les fichiers

Introduction
Tout programme ne communique pas directement avec les fichiers,
mais via certaines entités abstraites qui sont nommées
différemment dans différents langages ou environnements – les
termes les plus utilisés sont des descripteurs ou des flux.

Le programmeur, ayant un ensemble de fonctions / méthodes plus


ou moins riche, est capable d’effectuer certaines opérations sur le
flux, qui affectent les vrais fichiers en utilisant des mécanismes
contenus dans le noyau du système d’exploitation.

De cette façon, on peut implémenter le processus d’accès à


n’importe quel fichier, même lorsque le nom du fichier est inconnu
au moment de l’écriture du programme.

Ouverture d'un fichier

Pour connecter (lier) le flux au fichier, il est nécessaire d’effectuer une


opération explicite. L’opération de connexion du flux avec un fichier est
appelée ouverture du fichier, tandis que la déconnexion de ce lien est
appelée fermeture du fichier.

L’ouverture doit être la toute première opération effectuée sur le flux.


Syntaxe : f = open(file, mode = ‘r’, encoding = None)

avec :

file : spécifie le nom du fichier à associer au flux;


mode (facultatif): spécifie le mode ouvert utilisé pour le flux. Le
mode d’ouverture par défaut est la lecture en mode texte
encoding (facultatif) : spécifie le type de codage (par exemple,
UTF-8 lors de l’utilisation de fichiers texte). l’encodage par défaut
dépend de la plateforme utilisée
si l’ouverture réussit, la fonction open() renvoie un objet f; sinon,
une exception est déclenchée

Modes d’ouverture :
Les modes d’ouverture les plus importants :

r : Le flux sera ouvert en mode lecture(uniquement les opérations


de lecture autorisées). Le fichier associé au flux doit exister et
doit être lisible, sinon la fonction open() lève une exception.

w : Le flux sera ouvert en mode écriture (uniquement les opérations


d’écriture autorisées). Le fichier associé au flux n’a pas besoin
d’exister ; s’il n’existe pas, il sera créé; s’il existe, il sera tronqué à la
longueur de zéro (effacé); si la création n’est pas possible (par
exemple, en raison d’autorisations système), la fonction open() lève
une exception.

a+ : Le flux sera ouvert en mode ajout. Le fichier associé au flux n’a


pas besoin d’exister ; s’il n’existe pas, il sera créé; s’il existe, la tête
d’enregistrement virtuelle sera définie à la fin du fichier (le contenu
précédent du fichier reste intact).

r+ : Le flux sera ouvert en mode lecture et mise à jour. Le fichier


associé au flux doit exister et doit être accessible en écriture, sinon
la fonction open() lève une exception. Les opérations de lecture et
d’écriture sont autorisées pour le flux.

w+ : le flux sera ouvert en mode écriture et mise à jour. Le fichier


associé au flux n’a pas besoin d’exister; s’il n’existe pas, il sera
créé; le contenu précédent du fichier reste intact. Les opérations de
lecture et d’écriture sont autorisées pour le flux.

Remarque : L’ouverture du flux peut échouer pour plusieurs raisons:

l’absence de fichier avec un nom spécifié.


le fichier physique existe, mais le programme n’est pas autorisé à
l’ouvrir.
Le risque que le programme ait ouvert trop de flux, et le système
d’exploitation spécifique peut ne pas permettre l’ouverture simultanée de
plus de n fichiers (par exemple, 200).

Types de fichiers
Python suppose que chaque fichier est caché derrière un objet d’une
classe adéquate. Un objet d’une classe adéquate est créé lorsqu’on ouvre
le fichier et détruit au moment de la fermeture. En général, l’objet
provient d’une des classes présentées ici:
La fonction open() analyse les arguments qu’on a fourni et crée
automatiquement l’objet requis. l’invocation de la méthode close() coupera
la connexion à l’objet et au fichier et supprimera l’objet.

En raison du type de contenu du flux, tous les flux sont divisés en texte et
en flux binaires .

Les flux de texte sont structurés en lignes; c’est-à-dire qu’ils


contiennent des caractères typographiques (lettres, chiffres,
ponctuation, etc.) disposés en lignes. Ce fichier est écrit (ou lu)
principalement caractère par caractère ou ligne par ligne.
Les flux binaires ne contiennent pas de texte mais une séquence
d’octets de n’importe quelle valeur. Cette séquence peut être, par
exemple, un programme exécutable, une image, un clip audio ou
vidéo, un fichier de base de données, etc. Étant donné que ces fichiers
ne contiennent pas de lignes, les données sont lues / écrites octet par
octet, ou bloc par bloc, où la taille du bloc varie généralement et peut
être choisie arbitrairement.

Pour ouvrir le flux :

– en mode binaire, on ajoute la lettre b à la fin de la chaîne ,

– en mode texte, on ajoute la lettre t à la fin de la chaîne


Remarque : Le mode texte est le comportement par défaut supposé quand
aucun spécificateur de mode binaire / texte n’est utilisé.

Mode texte Mode binaire La description


rt Rb Lis
Wt Wb Écrire
At Ab Ajouter
r+t r+b Lis et MAJ
w+t w+b écrire et MAJ

Remarque : on peut également ouvrir un fichier pour sa création exclusive. on


peut le faire en utilisant le mode d’ouverture x. Si le fichier existe déjà, la
fonction open() lèvera une exception.

Flux pré-ouverts
On a dit que toute opération de flux doit être précédée de l’appel de la
fonction open(). Il existe trois exceptions bien définies à la règle. Lorsque
notre programme démarre, les trois flux sont déjà ouverts et ne nécessitent
aucune préparation supplémentaire. Se sont : sys.stdin, sys.stdout
et sys.stderr :

sys.stdin :
stdin ( entrée standard)
Le flux stdin est normalement associé au clavier, pré-ouvert pour la
lecture et considéré comme la principale source de données pour les
programmes en cours d’exécution;
La fonction bien connue input()lit les données stdin par défaut.
sys.stdout :
stdout (sortie standard)
Le flux stdout est normalement associé à l’écran, pré-ouvert pour
l’écriture, considéré comme la cible principale pour la sortie de
données par le programme en cours d’exécution;

La fonction bien connue print()fournit les données au flux stdout.

sys.stderr :
stderr (comme sortie d’erreur standard)
le flux stderr est normalement associé à l’écran, pré-ouvert pour
l’écriture, considéré comme le lieu principal où le programme en
cours doit envoyer des informations sur les erreurs rencontrées lors de
son travail;

Clôture des flux


La dernière opération effectuée devrait être la fermeture : f.close(). la
fonction ne renvoie rien mais lève l’exception IOError en cas d’erreur;

Remarque : La fonction strerror() permet de simplifier le code de gestion


des erreurs. elle provient du module os et attend un seul argument (un
numéro d’erreur) .

Exemple :

from os import strerror


try:

s = open(“c:/users/user/Desktop/file.txt”, “rt”)

…..

s.close()

except Exception as exc:

print(“On n’arrive pas à ouvrir le fichier :”, strerror(exc.errno));

Traitement des fichiers texte


1- Lecture
Pour lire le contenu du fichier afin de les traiter.

f = open(“a.txt”, “rt”, encoding = “utf-8”)

print(f.read())

La lecture du contenu d’un fichier texte peut être effectuée en utilisant


plusieurs méthodes différentes :

1.1- read() :
La plus élémentaire de ces méthodes est celle offerte par la
fonction read(). Si elle est appliquée à un fichier texte, la fonction est
capable de:

lire un nombre souhaité de caractères (dont un seul) dans le fichier et


les renvoyer sous forme de chaîne;
lire tout le contenu du fichier et le renvoyer sous forme de chaîne;
s’il n’y a plus rien à lire (la tête de lecture virtuelle atteint la fin du
fichier), la fonction renvoie une chaîne vide.

Exemple :

cnt = 0

s = open(‘text.txt’, “rt”)

ch = s.read(1)

while ch != ”:

print(ch, end=”)

cnt += 1

ch = s.read(1)

s.close()

print(“le nombre de caractères du fichier :”, cnt)

On peut lire le fichier entier dans la mémoire à la fois via la fonction read(),
invoquée sans aucun argument ou avec un argument évalué None.
Remarque : la lecture d’un fichier de plusieurs téraoctets à l’aide de
cette méthode peut corrompre votre système d’exploitation.

Exemple :

cnt = 0

s = open(‘text.txt’, “rt”)

content = s.read()

for ch in content:

print(ch, end=”)

cnt += 1

s.close()

print(“le nombre de caractères du fichier :”, cnt)

Le résultat sera exactement le même que précédemment.

1.2- readline ()
Pour traiter le contenu du fichier comme un ensemble de lignes, pas comme
un groupe de caractères, on utilise la méthode readline()

La méthode essaie de lire une ligne complète de texte à partir du fichier et


la renvoie sous forme de chaîne en cas de succès. Sinon, il renvoie une chaîne
vide.
Exemple :

from os import strerror

try:

ccnt = lcnt = 0

s = open(‘text.txt’, ‘rt’)

ligne = s.readline()

while ligne != ”:

lcnt += 1

for ch in ligne:

print(ch, end=”)

ccnt += 1

ligne = s.readline()

s.close()

print(“le nombre de caractères du fichier :”, ccnt)

print(“le nombre de lignes du fichier “, lcnt)

except IOError as e:
print(“erreur I/O: “, strerr(e.errno))

1.3- readlines ()
La méthode readlines(), lorsqu’elle est invoquée sans arguments, essaie
de lire tout le contenu du fichier et retourne une liste de chaînes, un
élément par ligne de fichier .

On peut imposer à la méthode readlines() de lire pas plus d’un nombre


spécifié d’octets à la fois (ajout d(un argument pour décrire la taille maximale
autorisée).

Remarque: lorsqu’il n’y a rien à lire dans le fichier, la méthode renvoie une
liste vide.

Exemple :

ccnt = lcnt = 0

s = open(‘text.txt’, ‘rt’)

lignes = s.readlines(20)

while len(lignes) != 0:

for ligne in lines:

lcnt += 1

for ch in ligne:

print(ch, end=”)
ccnt += 1

lignes = s.readlines(10)

s.close()

print(“\nNombre de caractères dans le fichier:”, ccnt)

print(“Nombre de lignes : “, lcnt)

Remarque : l’objet retourné par la fonction open() en mode texte est une

instance de la classe itérable . Le protocole d’itération défini

renvoie simplement la ligne suivante lue dans le fichier.

En outre, on peut nous attendre à ce que l’objet invoque


automatiquement close()lorsque l’un des fichiers lus atteint la fin du
fichier.

Exemple :

ccnt = lcnt = 0

for ligne in open(‘text.txt’, ‘rt’):

lcnt += 1

for ch in ligne:

print(ch, end=”)
ccnt += 1

print(“\nNombre de caractères dans le fichier:”, ccnt)

print(“Nombre de lignes : “, lcnt)

2- Ecriture : write ()
La méthode write() n’attend qu’un seul argument – une chaîne qui sera
transférée dans un fichier ouvert. Exemple : crée un fichier nommé a.txt,
puis y met dix lignes.

f = open(a.txt’, ‘wt’)

for i in range(10):

f.write( “ligne ” + str(i+1) + “\n”)

f.close()

Introduction

Vous aimerez peut-être aussi