Ouvrir des fichiers en toute sécurité avec des gestionnaires de contexte
Pourboire
Pour plus d’informations, consultez l’onglet Texte et images !
Pour utiliser un fichier dans Python, vous devez d’abord l’ouvrir. L’ouverture d’un fichier vous donne un objet de fichier dans lequel vous pouvez lire ou écrire. Lorsque vous avez terminé, vous devez fermer le fichier afin que le système d’exploitation puisse libérer ses ressources et toutes les écritures en attente sont enregistrées.
Le problème avec l’oubli de fermer un fichier
Vous pouvez ouvrir un fichier avec open() et le fermer avec .close():
file = open("notes.txt", "r")
contents = file.read()
print(contents)
file.close()
Le problème est que si une erreur se produit après open() mais avant .close(), le fichier reste ouvert, ce qui peut entraîner des pertes de données, des fichiers verrouillés ou des fuites de ressources.
Utilisation de l’instruction with
Le moyen plus sûr et plus python d’utiliser des fichiers est l’instruction with . Il utilise une fonctionnalité appelée gestionnaire de contexte qui ferme automatiquement le fichier à la fin du bloc, même si une erreur se produit.
with open("notes.txt", "r") as file:
contents = file.read()
print(contents)
# File is automatically closed here
Tout après as est le nom que vous donnez à l’objet de fichier à l’intérieur du bloc. Une fois le bloc terminé, le fichier est fermé pour vous.
Modes de fichier
Le deuxième argument de open() est le mode, qui indique à Python ce que vous comptez faire avec le fichier :
| Mode | Sens |
|---|---|
"r" |
Lecture (par défaut). Le fichier doit déjà exister. |
"w" |
écrire. Crée un fichier ou remplace celui existant. |
"a" |
Ajouter. Ajoute à la fin du fichier ou le crée s’il est manquant. |
"r+" |
Lecture et écriture. |
Choisissez le mode qui correspond à ce que vous souhaitez faire : l’utilisation du mode incorrect est une cause courante des fichiers effacés accidentellement.
Une valeur par défaut plus sûre
Pour le reste de ce module, ouvrez toujours les fichiers avec with. C'est le modèle le plus sûr et celui que vous verrez dans presque toutes les vraies Python codebase.