archivo de cierre de python

Funciones y métodos de Python

Solo puede leer y escribir en un archivo Python si el archivo está abierto. Si intenta acceder o manipular un archivo que se ha cerrado, el & ldquo; ValueError: operación de E / S en archivo cerrado & rdquo; aparece en su código.

En esta guía, hablamos sobre lo que significa este error y por qué se genera. Analizamos dos ejemplos de este error para que pueda aprender a resolverlo.




ValueError: operación de E / S en un archivo cerrado

Se ha convertido en una buena práctica en Python cierre un archivo tan pronto como haya terminado de trabajar con el archivo . Esto le ayuda a limpiar su código en el intérprete de Python. Una vez que se ha cerrado un archivo en un programa Python, ya no puede leer ni escribir en ese archivo directamente.

Hay dos escenarios comunes en los que & ldquo; ValueError: operación de E / S en archivo cerrado & rdquo; se encuentra:

Let & rsquo; s repasar cada uno de estos escenarios y discutirlos en detalle.




Causa # 1: Sangría incorrecta

Vamos a escribir un programa que lea una lista de las calificaciones de los estudiantes de un archivo CSV . Nuestro archivo CSV se llama Students.csv. Actualmente almacena los siguientes datos:

 Andrew, 73,84,92 Linda, 76,77 , 72 Samantha, 64,63,75 

Para empezar, importamos la biblioteca csv en nuestro código para podemos leer nuestro archivo CSV. Luego usamos una instrucción with para abrir nuestro archivo:

 import csv con open ("estudiantes.csv", "r") como estudiantes: read_file = csv.reader (estudiantes) 

Este código abre el archivo & ldquo; estudiantes.csv & rdquo; en modo de lectura (& ldquo; r & rdquo;). Asignamos el contenido del archivo a la variable & ldquo; read_file & rdquo ;.

El 81% de los participantes afirmó que se sentía más seguro acerca de sus perspectivas de trabajo técnico después de asistir a un bootcamp. Asigne a un bootcamp hoy mismo.

El graduado promedio de un bootcamp pasó menos de seis meses en la transición profesional, desde comenzar un bootcamp hasta encontrar su primer trabajo.

Imprimamos a cada estudiante & rsquo ; s registro en la consola:

 para s en read_file: print ("Nombre:" + s [0 ]) print ("Puntaje de la prueba 1:" + s [1]) print ("Puntaje de la prueba 2:" + s [2]) print ("Puntaje de la evaluación de la unidad:" + s [3]) 

Usamos & ldquo; para & rdquo; bucle para iterar sobre cada elemento en el & ldquo; read_file & rdquo; variable. Esta variable almacena nuestro archivo CSV en una lista. A continuación, usamos la indexación para acceder a cada valor de cada registro de estudiante. Imprimimos cada uno de estos valores en la consola.

Ejecute nuestro código:

 Traceback (última llamada más reciente): archivo "main.py", línea 6, en & lt; módulo & gt; para s en read_file: ValueError: operación de E / S en archivo cerrado. 

Nuestro código devuelve un error. Esto se debe a que hemos intentado iterar sobre & ldquo; read_file & rdquo; fuera de nuestra instrucción with . El & ldquo; read_file & rdquo;  variable solo se puede leer dentro de la instrucción with . Después de que se ejecuta la instrucción with , el archivo se cierra.

Para resolver este problema, necesitamos sangrar nuestro bucle for para que esté dentro de nuestro con declaración:

 importar csv con open ("estudiantes.csv", "r") como estudiantes: read_file = csv.reader (Students) for s in range (1, read_file): print ("Nombre:" + s [0]) print ("Puntaje de prueba 1:" + s [1]) print (" Puntuación de la prueba 2: "+ s [2]) print (" Puntuación de la evaluación de la unidad: "+ s [3]) 

Ejecute este código revisado:

 Nombre: Andrew Prueba 1 Puntaje: 73 Prueba 2 Puntaje: 84 Puntaje de evaluación de la unidad: 92 Nombre: Linda Prueba 1 Puntaje: 76 Prueba 2 Puntaje: 77 Puntuación de la evaluación de la unidad: 72 Nombre: Prueba 1 de Samantha Puntuación: 64 Puntuación de la prueba 2: 63 Puntuación de la evaluación de la unidad: 75 

Nuestro código se ejecuta correctamente.

Mientras con declaraciones son la forma más común de acceder a un archivo, puede usar un open ()  declaración sin una instrucción con para acceder a un archivo.

Lea el contenido de nuestro & ldquo; estudiantes.csv & rdquo; file:

 estudiantes = abierto ("estudiantes.csv", "r") read_file = csv .reader (estudiantes) estudiantes.close () 

Usamos el método open () para abrir el archivo & ldquo; estudiantes.csv & rdquo; archivo en modo lectura. Luego usamos el método csv.reader () para leer nuestro archivo CSV. Luego cerramos nuestro archivo porque hemos leído su contenido en una variable.


A continuación, imprima cada registro de nuestro archivo en la consola usando un bucle for:

 para s en read_file: print (" Nombre: "+ s [0]) print (" Puntaje de prueba 1: "+ s [1]) print (" Puntaje de prueba 2: "+ s [2]) print ("Puntuación de evaluación de la unidad:" + s [3]) 

Este ciclo for es el mismo que el de nuestro último ejemplo. El ciclo imprime todos los información sobre cada registro en nuestro archivo CSV. Probemos nuestro código:

 Traceback ( última llamada más reciente): Archivo "main.py", línea 7, en & lt; módulo & gt; para s en read_file: ValueError: operación de E / S en archivo cerrado. 

Nuestro código aumenta un error. Esto se debe a que intentamos iterar sobre & ldquo; read_file & rdquo; después de haber cerrado nuestro archivo. Si tenemos este error, debemos cerrar nuestro archivo después de haber iterado sobre & ldquo; read_file & rdquo ;:

 estudiantes = abierto ("estudiantes.csv", "r") read_file = csv.reader (estudiantes) para s en read_file: print ("Nombre:" + s [0]) print ("Puntaje de prueba 1:" + s [ 1]) print ("Puntaje de prueba 2:" + s [2]) print ("Puntaje de evaluación de la unidad:" + s [3]) estudiantes.close () 

Vamos a ejecute nuestro código nuevamente:

 Nombre: Andrew Prueba 1 Puntuación: 73 Prueba 2 Puntuación: 84 Unidad Puntaje de evaluación: 92 Nombre: Puntaje de la prueba 1 de Linda: 76 Puntaje de la prueba 2: 77 Puntaje de evaluación de la unidad: 72 Nombre: Puntaje de la prueba 1 de Samantha: 64 Puntaje de la prueba 2: 63 Puntaje de la evaluación de la unidad: 75 

Nuestro código se ejecuta con éxito. Los valores en & ldquo; read_file & rdquo; son accesibles hasta que cerramos nuestro archivo. Debido a que usamos nuestro bucle for antes de nuestra declaración close () , nuestro código se ejecuta sin errores. Una vez que imprimimos el registro de cada estudiante en la consola, cerramos nuestro archivo.




Conclusión

El & ldquo; ValueError: operación de E / S en archivo cerrado & rdquo; se genera un error cuando intenta leer o escribir en un archivo que se ha cerrado.

Si está utilizando una instrucción con , asegúrese de que su el código está sangrado correctamente. Si no está utilizando una instrucción with , asegúrese de no cerrar el archivo antes de leer su contenido.


< / a>

¡Ahora está listo para resolver este error como un experto en Python !

"Career Karma entró en mi vida cuando más lo necesitaba y rápidamente me ayudó a combinar con un bootcamp. ¡Dos meses después de graduarme, encontré el trabajo de mis sueños que se alineaba con mis valores y metas en la vida! "

Venus, ingeniero de software en Rockbot

< button> Find Your Bootcamp Match



archivo de cierre de python: StackOverflow Questions

Tutorials