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.