Python fermer le fichier

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.

Ensuite, imprimez chaque enregistrement de notre fichier sur la console à l’aide d’une boucle for :

Cette boucle for est la même que celle de notre dernier exemple. La boucle imprime tous les informations sur chaque enregistrement dans notre fichier CSV. Testons notre code :

Notre code lève une erreur. C’est parce que nous essayons d’itérer sur "read_file" après avoir fermé notre fichier. En cas d’erreur, nous devons fermer notre fichier après avoir parcouru "read_file‚" :

Let‚Äôs réexécutez notre code :

Notre code s’exécute avec succès. Les valeurs dans "read_file‚" sont accessibles jusqu’à ce que nous fermions notre dossier. Parce que nous avons utilisé notre boucle for avant notre instruction close(), notre code s’exécute sans erreur. Une fois que nous avons imprimé chaque fiche d’élève sur la console, nous fermons notre fichier.

Conclusion

La "ValueError : I/O operation on closed file‚" une erreur est générée lorsque vous essayez de lire ou d’écrire dans un fichier qui a été fermé.

Si vous utilisez une instruction with, vérifiez que votre le code est correctement indenté. Si vous n’utilisez pas d’instruction with, assurez-vous de ne pas fermer votre fichier avant d’avoir lu son contenu.

Maintenant, vous êtes prêt à résoudre cette erreur comme un expert Python !

"Career Karma est entré dans ma vie au moment o√π j’en avais le plus besoin et m’a rapidement aidé à suivre un bootcamp. Deux mois après avoir obtenu mon diplôme, j’ai trouvé l’emploi de mes rêves qui correspondait à mes valeurs et à mes objectifs dans la vie !"

Venus, ingénieur logiciel chez Rockbot