Acordeón de los Índices
Índice de los temas
Lección: 38 - File Handling en Python
📂 Open a File on the Server
📂 Para poder trabajar con un archivo en Python, ya sea para leer su contenido o para escribir en él, el primer paso fundamental es abrir el archivo. Esto se realiza utilizando la función incorporada open()
.
La función open()
toma al menos un argumento: el nombre del archivo (o la ruta al archivo). Además, puede tomar un segundo argumento opcional: el modo en el que se abrirá el archivo.
La sintaxis básica es la siguiente:
archivo = open("nombre_del_archivo.txt")
# o especificando el modo
archivo = open("otro_archivo.txt", "r")
Modos de apertura de archivos comunes:
'r'
: Modo de lectura (read). El archivo debe existir. Si no se especifica el modo, este es el valor por defecto.'w'
: Modo de escritura (write). Si el archivo existe, su contenido se sobrescribe. Si no existe, se crea un nuevo archivo.'a'
: Modo de añadir (append). Si el archivo existe, el nuevo contenido se añade al final del archivo. Si no existe, se crea un nuevo archivo.'x'
: Modo de creación exclusiva (exclusive creation). Crea un nuevo archivo, pero falla si el archivo ya existe.'b'
: Modo binario. Se utiliza con otros modos (ej.,'rb'
para lectura binaria,'wb'
para escritura binaria).'t'
: Modo texto (text). Este es el modo por defecto para archivos de texto.'+'
: Modo de actualización (updating). Permite tanto la lectura como la escritura. Se debe usar con otros modos (ej.,'r+'
,'w+'
,'a+'
).
Ejemplo: Abriendo un archivo en modo lectura:
try:
archivo = open("mi_archivo_ejemplo.txt", "r")
print("El archivo 'mi_archivo_ejemplo.txt' se ha abierto en modo lectura.")
# Aquí podríamos realizar operaciones de lectura
finally:
# Es importante cerrar el archivo después de usarlo
if 'archivo' in locals() and not archivo.closed:
archivo.close()
print("El archivo ha sido cerrado.")
except FileNotFoundError:
print("Error: El archivo 'mi_archivo_ejemplo.txt' no fue encontrado.")
except Exception as e:
print(f"Ocurrió un error inesperado: {e}")
En este ejemplo, intentamos abrir el archivo "mi\_archivo\_ejemplo.txt" en modo lectura. El bloque try...finally
asegura que el archivo se intente cerrar incluso si ocurre un error al abrirlo o al trabajar con él.
Una vez que el archivo se ha abierto con éxito, obtenemos un objeto archivo que podemos utilizar para realizar operaciones como leer su contenido, como veremos en los siguientes temas.
🔒 Close Files
🔒 Una vez que has terminado de leer o escribir en un archivo, es crucial cerrarlo correctamente. Esto se hace utilizando el método close()
del objeto archivo.
¿Por qué es importante cerrar los archivos?
- Liberación de recursos del sistema: Los archivos abiertos consumen recursos del sistema operativo. Cerrarlos libera estos recursos, permitiendo que estén disponibles para otras operaciones.
- Guardado de cambios: Cuando escribes en un archivo, los datos a menudo se almacenan temporalmente en un búfer. Cerrar el archivo fuerza la escritura de estos búferes al disco, asegurando que tus cambios se guarden permanentemente.
- Prevención de errores: Dejar archivos abiertos durante demasiado tiempo o sin cerrarlos correctamente puede llevar a errores, como la corrupción del archivo o la imposibilidad de acceder a él por otros programas.
Usando el método close()
:
Para cerrar un archivo, simplemente llama al método close()
en el objeto archivo.
try:
f = open("demofile.txt", "r")
# Realizar operaciones con el archivo
print("Operaciones con el archivo completadas.")
finally:
f.close()
print("Archivo cerrado.")
En este ejemplo, aseguramos que el archivo se cierre en el bloque finally
. Esto garantiza que f.close()
se ejecute siempre, incluso si ocurre una excepción en el bloque try
.
La sentencia with
: Una forma más segura y concisa
Como hemos visto en los temas anteriores, la sentencia with
proporciona una forma aún más elegante y segura de trabajar con archivos. Cuando utilizas with open(...) as f:
, el archivo se abre y se asigna al objeto f
. Al salir del bloque with
, el archivo se cierra automáticamente, incluso si ocurren errores. Esto elimina la necesidad de llamar explícitamente a f.close()
.
Ejemplo: Usando with
para asegurar el cierre automático del archivo:
try:
with open("demofile.txt", "r") as f:
contenido = f.read()
print("Contenido del archivo leído.")
# El archivo se cierra automáticamente al salir de este bloque
print("El archivo ha sido cerrado automáticamente.")
except FileNotFoundError:
print("El archivo 'demofile.txt' no fue encontrado.")
except Exception as e:
print(f"Ocurrió un error: {e}")
En resumen, siempre debes cerrar tus archivos después de usarlos. La sentencia with
es la forma recomendada de hacerlo en Python, ya que asegura el cierre automático y hace que tu código sea más limpio y menos propenso a errores relacionados con la gestión de archivos.
✂️ Read Only Parts of the File
✂️ A veces, cuando trabajamos con archivos grandes, no necesitamos leer todo su contenido de una vez. Python nos permite leer solo una parte específica del archivo utilizando el método read()
con un argumento que indica el número de caracteres (en modo texto) o bytes (en modo binario) que queremos leer.
Utilizando read(size)
:
El método read()
, cuando se invoca con un argumento entero size
, lee hasta size
caracteres desde la posición actual del archivo y los devuelve como una cadena. Si el archivo está abierto en modo binario, leerá hasta size
bytes y los devolverá como un objeto de bytes.
Ejemplo: Leer los primeros 50 caracteres de un archivo:
try:
with open("mi_archivo.txt", "r") as archivo:
primeros_caracteres = archivo.read(50)
print(f"Los primeros 50 caracteres del archivo son: '{primeros_caracteres}'")
except FileNotFoundError:
print("El archivo 'mi_archivo.txt' no fue encontrado.")
except Exception as e:
print(f"Ocurrió un error: {e}")
En este ejemplo, abrimos el archivo "mi\_archivo.txt" en modo lectura ("r"
) y luego leemos los primeros 50 caracteres utilizando archivo.read(50)
. La sentencia with
asegura que el archivo se cierre correctamente después de su uso.
Leer partes secuencialmente:
Cada vez que llamas a read(size)
, el puntero de lectura del archivo avanza. Esto significa que si vuelves a llamar a read(size)
, leerás la siguiente porción del archivo.
Ejemplo: Leer un archivo en bloques de 20 caracteres:
try:
with open("mi_archivo_largo.txt", "r") as archivo:
longitud_bloque = 20
bloque = archivo.read(longitud_bloque)
while bloque:
print(f"Bloque leído: '{bloque}'")
bloque = archivo.read(longitud_bloque)
except FileNotFoundError:
print("El archivo 'mi_archivo_largo.txt' no fue encontrado.")
except Exception as e:
print(f"Ocurrió un error: {e}")
En este código, leemos el archivo en bloques de 20 caracteres hasta que archivo.read(longitud_bloque)
devuelve una cadena vacía, lo que indica que hemos llegado al final del archivo.
Leer solo partes de un archivo puede ser muy útil para archivos grandes donde cargar todo el contenido en la memoria no es eficiente o necesario. También permite un procesamiento más controlado del flujo de datos del archivo.
📄 Read Lines
📄 Cuando trabajamos con archivos de texto, una tarea común es leer el contenido línea por línea. Python nos ofrece varias formas de lograr esto.
El método readline()
:
El método readline()
lee una única línea del archivo, incluyendo el carácter de fin de línea (\n
) si está presente. En llamadas subsiguientes, continuará leyendo el archivo línea por línea. Cuando alcanza el final del archivo, readline()
devuelve una cadena vacía.
Ejemplo: Leer un archivo línea por línea:
try:
with open("mi_archivo_texto.txt", "r") as archivo:
linea = archivo.readline()
while linea:
print(f"Línea leída: '{linea.strip()}'") # .strip() elimina espacios en blanco al inicio y final, incluyendo el '\n'
linea = archivo.readline()
except FileNotFoundError:
print("El archivo 'mi_archivo_texto.txt' no fue encontrado.")
except Exception as e:
print(f"Ocurrió un error: {e}")
En este ejemplo, abrimos "mi\_archivo\_texto.txt" en modo lectura y utilizamos un bucle while
para leer cada línea hasta que readline()
devuelve una cadena vacía. El método strip()
se usa para limpiar la línea de cualquier espacio en blanco al principio o al final.
El método readlines()
:
El método readlines()
lee todas las líneas del archivo y las devuelve como una lista de cadenas. Cada cadena en la lista representa una línea del archivo, incluyendo el carácter de fin de línea.
Ejemplo: Leer todas las líneas a una lista:
try:
with open("otro_archivo.txt", "r") as archivo:
todas_las_lineas = archivo.readlines()
for linea in todas_las_lineas:
print(f"Línea: '{linea.strip()}'")
except FileNotFoundError:
print("El archivo 'otro_archivo.txt' no fue encontrado.")
except Exception as e:
print(f"Ocurrió un error: {e}")
Aquí, readlines()
carga todas las líneas del archivo en la lista todas_las_lineas
, que luego iteramos para imprimir cada línea.
Iterando directamente sobre el objeto archivo:
La forma más idiomática y eficiente en memoria para leer un archivo línea por línea es iterar directamente sobre el objeto archivo en un bucle for
. Python trata el objeto archivo como un iterador que produce líneas del archivo en cada paso.
Ejemplo: Iterar sobre el archivo para leer líneas:
try:
with open("un_archivo.txt", "r") as archivo:
for linea in archivo:
print(f"Línea (iteración): '{linea.strip()}'")
except FileNotFoundError:
print("El archivo 'un_archivo.txt' no fue encontrado.")
except Exception as e:
print(f"Ocurrió un error: {e}")
Esta es la manera más recomendada para leer archivos de texto línea por línea en Python, especialmente para archivos grandes, ya que no carga todo el contenido en la memoria de una vez.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias