Python Datei schließen

Sie k√∂nnen eine Python-Datei nur lesen und schreiben, wenn die Datei ge√∂ffnet ist. Wenn Sie versuchen, auf eine geschlossene Datei zuzugreifen oder sie zu bearbeiten, wird der "ValueError : I/O-Vorgang bei geschlossener Datei‚" wird in Ihrem Code angezeigt.

In diesem Leitfaden sprechen wir daruber, was dieser Fehler bedeutet und warum er ausgelöst wird. Wir gehen zwei Beispiele fur diesen Fehler durch, damit Sie lernen, wie Sie ihn beheben können.

ValueError : I/O-Operation auf geschlossener Datei

Es hat sich in Python bewährt, schließen Sie eine Datei, sobald Sie die Arbeit mit der Datei beendet haben. Dies hilft Ihnen, Ihren Code im Python-Interpreter zu bereinigen. Sobald eine Datei in einem Python-Programm geschlossen wurde, können Sie diese Datei nicht mehr direkt lesen oder schreiben.

Es gibt zwei h√§ufige Szenarien, in denen der "ValueError : I/O operation on geschlossene Datei‚" auftritt:

  • Wenn Sie vergessen, Ihren Code in einer "mit‚" -Anweisung
  • Wenn Sie versuchen, eine Datei zu lesen, nachdem sie mit der Anweisung close() geschlossen wurde

Lassen Sie’ s gehen jedes dieser Szenarien durch und besprechen sie im Detail.

Ursache #1: Unsachgemäße Einruckung

Lassen Sie uns ein Programm schreiben, das eine Liste der Schulernoten aus einer CSV-Datei liest . Unsere CSV-Datei heißt Students.csv. Es speichert derzeit die folgenden Daten:

Zuerst importieren wir die csv-Bibliothek in unseren Code, also wir können unsere CSV-Datei lesen. Wir verwenden dann eine with-Anweisung, um unsere Datei zu öffnen:

Dieser Code √∂ffnet die Datei "students.csv‚" im Lesemodus ("r‚"). Wir weisen den Inhalt der Datei der Variablen "read_file‚" zu.

81 % der Teilnehmer gaben an, dass sie sich nach dem Besuch eines Bootcamps hinsichtlich ihrer Berufsaussichten im Tech-Bereich sicherer fuhlten. Lassen Sie sich noch heute in ein Bootcamp einweisen.

Der durchschnittliche Bootcamp-Absolvent verbrachte weniger als sechs Monate im Karriereubergang, vom Beginn eines Bootcamps bis zur Suche nach seinem ersten Job.

Lass uns jeden Studenten ausdrucken&rsquo ;s Record an die Konsole:

Wir verwenden eine "fur‚" Schleife, um jedes Element in der "read_file‚" Variable. Diese Variable speichert unsere CSV-Datei in einer Liste. Als N√§chstes verwenden wir die Indizierung, um auf jeden Wert aus jedem Schulerdatensatz zuzugreifen. Wir geben jeden dieser Werte an die Konsole aus.

Fuhren Sie unseren Code aus:

Unser Code gibt einen Fehler zuruck. Dies liegt daran, dass wir versucht haben, "read_file‚" au√üerhalb unserer with-Anweisung. Die "read_file‚" variable kann nur innerhalb der with-Anweisung gelesen werden. Nachdem die with-Anweisung ausgefuhrt wurde, wird die Datei geschlossen.

Um dieses Problem zu lösen, mussen wir unsere for-Schleife so einrucken, dass sie sich in unserem befindet with-Anweisung:

Diesen uberarbeiteten Code ausfuhren:

Unser Code wird erfolgreich ausgefuhrt.

Während with-Anweisungen sind die gebräuchlichste Methode, um auf eine Datei zuzugreifen. Sie können eine open()-Anweisung verwenden -Anweisung ohne eine with-Anweisung, um auf eine Datei zuzugreifen.

Lesen Sie den Inhalt unserer "students.csv‚" file:

Wir verwenden die Methode open(), um die Datei "students.csv‚" Datei im Lesemodus. Wir verwenden dann die Methode csv.reader(), um unsere CSV-Datei zu lesen. Wir schlie√üen dann unsere Datei, weil wir ihren Inhalt in eine Variable eingelesen haben.

Drucken Sie als N√§chstes jeden Datensatz aus unserer Datei mithilfe einer for-Schleife an die Konsole:

Diese for-Schleife ist die gleiche wie die aus unserem letzten Beispiel. Die Schleife druckt alle Informationen zu jedem Datensatz in unserer CSV-Datei. Testen Sie unseren Code:

Unser Code erh√∂ht Dies liegt daran, dass wir versuchen, uber "read_file‚" zu iterieren, nachdem wir unsere Datei geschlossen haben Bei diesem Fehler sollten wir unsere Datei schlie√üen, nachdem wir uber "read_file‚" iteriert haben:

Lassen Sie’s Fuhren Sie unseren Code erneut aus:

Unser Code wird erfolgreich ausgefuhrt. Die Werte in "read_file‚" sind zug√§nglich, bis wir unsere Datei schlie√üen. Da wir unsere for-Schleife vor unserer close()-Anweisung verwendet haben, wird unser Code ohne Fehler ausgefuhrt. Sobald wir jeden Schulerdatensatz auf der Konsole ausgeben, schlie√üen wir unsere Datei.

Schlussfolgerung

Der "ValueError: E/A-Vorgang bei geschlossener Datei‚" ein Fehler wird ausgel√∂st, wenn Sie versuchen, aus einer geschlossenen Datei zu lesen oder in eine Datei zu schreiben.

Wenn Sie eine with-Anweisung verwenden, uberprufen Sie, ob Ihre Code ist richtig eingeruckt. Wenn Sie keine with-Anweisung verwenden, stellen Sie sicher, dass Sie Ihre Datei nicht schließen, bevor Sie ihren Inhalt gelesen haben.

Jetzt sind Sie bereit, diesen Fehler wie ein Python-Experte zu beheben!

"Karma-Karriere trat in mein Leben ein, als ich es am dringendsten brauchte, und half mir schnell bei einem Bootcamp. Zwei Monate nach meinem Abschluss habe ich meinen Traumjob gefunden, der meinen Werten und Lebenszielen entspricht!"

Venus, Software Engineer bei Rockbot