Abrir archivos de forma segura con administradores de contexto

Completados

Tip

Consulte la pestaña Texto e imágenes para obtener más detalles.

Para trabajar con un archivo en Python, primero debe abrirlo. Abrir un archivo proporciona un objeto de archivo en el que puede leer o escribir. Cuando haya terminado, debe cerrar el archivo para que el sistema operativo pueda liberar sus recursos y se guardan las escrituras pendientes.

El problema con olvidar cerrar un archivo

Puede abrir un archivo con open() y cerrarlo con .close():

file = open("notes.txt", "r")
contents = file.read()
print(contents)
file.close()

El problema es que si se produce un error después open() de pero antes .close()de , el archivo permanece abierto, lo que puede provocar pérdidas de datos, archivos bloqueados o pérdidas de recursos.

Usar la with declaración

La forma más segura y más idiomática de Python de trabajar con archivos es la instrucción with. Usa una característica denominada administrador de contexto que cierra automáticamente el archivo cuando finaliza el bloque, incluso si se produce un error.

with open("notes.txt", "r") as file:
    contents = file.read()
    print(contents)
# File is automatically closed here

Todo después as es el nombre que asigna al objeto de archivo dentro del bloque. Una vez finalizado el bloque, el archivo se cierra automáticamente.

Modos de archivo

El segundo argumento para open() es el modo , que indica Python lo que planea hacer con el archivo:

Mode Meaning
"r" Lectura (valor predeterminado). El archivo ya debe existir.
"w" Escribir. Crea un nuevo archivo o sobrescribe el existente.
"a" Añadir. Añade al final del archivo o lo crea si no existe.
"r+" Lectura y escritura.

Elija el modo que coincida con lo que desea hacer; el uso del modo incorrecto es una causa común de archivos borrados accidentalmente.

Un valor predeterminado más seguro

Para el resto de este módulo, abra siempre los archivos mediante with. Es el patrón más seguro y el que encontrarás en casi todas las bases de código reales de Python.