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