Vous ne pouvez lire et écrire dans un fichier Python que si le fichier est ouvert. Si vous essayez d’accéder ou de manipuler un fichier qui a été fermé, la "ValueError : I/O operation on closed file" apparaaît dans votre code.
Dans ce guide, nous expliquons ce que signifie cette erreur et pourquoi elle est générée. Nous passons en revue deux exemples de cette erreur afin que vous puissiez apprendre à la résoudre.
ValueError : opération d’E/S sur un fichier fermé
C’est devenu une bonne pratique en Python de fermez un fichier dès que vous avez fini de travailler avec le fichier. Cela vous aide à nettoyer votre code dans l’interpréteur Python. Une fois qu’un fichier a été fermé dans un programme Python, vous ne pouvez plus lire ou écrire directement dans ce fichier.
Il existe deux scénarios courants o√π l’opération "ValueError : I/O on fichier fermé" est rencontré :
- Lorsque vous oubliez d’indenter correctement votre code dans un "with‚" instruction
- Lorsque vous essayez de lire un fichier après sa fermeture à l’aide de l’instruction
close()
Let‚Äô Parcourez chacun de ces scénarios et discutez-en en détail.
Cause n° 1 : Indentation incorrecte
√âcrivons un programme qui lit une liste des notes des élèves à partir d’un fichier CSV . Notre fichier CSV s’appelle étudiants.csv. Il stocke actuellement les données suivantes :
Pour commencer, nous importons la bibliothèque csv dans notre code afin nous pouvons lire notre fichier CSV. Nous utilisons ensuite une instruction with
pour ouvrir notre fichier :
Ce code ouvre le fichier "students.csv‚" en mode lecture ("r"). Nous attribuons le contenu du fichier à la variable "read_file‚".
81% des participants ont déclaré qu’ils se sentaient plus confiants quant à leurs perspectives d’emploi technologique après avoir assisté à un bootcamp. Soyez jumelé à un bootcamp aujourd’hui.
Le diplômé moyen d’un bootcamp a passé moins de six mois en transition de carrière, du démarrage d’un bootcamp à la recherche de son premier emploi.
Imprimons chaque élève&rsquo ;s enregistrement sur la console :
Nous utilisons un "for‚" boucle pour parcourir chaque élément du "read_file‚" variable. Cette variable stocke notre fichier CSV dans une liste. Ensuite, nous utilisons l’indexation pour accéder à chaque valeur de chaque dossier étudiant. Nous imprimons chacune de ces valeurs sur la console.
Exécutez notre code :
Notre code renvoie une erreur. C’est parce que nous avons essayé d’itérer sur "read_file‚" en dehors de notre instruction with
. Le "read_file" variable ne peut être lu qu’à l’intérieur de l’instruction with
. Une fois l’instruction with
exécutée, le fichier est fermé.
Pour résoudre ce problème, nous devons indenter notre boucle for afin qu’elle se trouve dans notre avec l’instruction
:
Exécutez ce code révisé :
Notre code s’exécute avec succès.
Pendant que with
instructions sont le moyen le plus courant d’accéder à un fichier, vous pouvez utiliser un open()
sans instruction with
pour accéder à un fichier.
Lisez le contenu de notre "students.csv‚" fichier :
Nous utilisons la méthode open()
pour ouvrir le "students.csv‚" fichier en mode lecture. Nous utilisons ensuite la méthode csv.reader()
pour lire notre fichier CSV. Nous fermons ensuite notre fichier car nous avons lu son contenu dans une variable.