Dominar la lectura y escritura de archivos es una habilidad fundamental en Python para cualquier desarrollador que trabaje con datos, configuraciones o cualquier tipo de persistencia. Este artículo te guiará a través de los conceptos esenciales y las mejores prácticas para manipular archivos de manera eficiente y segura.
Desde la apertura y cierre de archivos, hasta el manejo de diferentes formatos como texto, CSV y JSON, cubriremos todo lo que necesitas saber para trabajar con archivos en tus proyectos de Python.
Apertura y Cierre de Archivos
El primer paso para trabajar con archivos en Python es abrirlos. La función clave para esto es open()
, que requiere al menos el nombre del archivo como argumento. Además, se debe especificar el modo de apertura, que indica la intención de uso del archivo (lectura, escritura, etc.).
Modos comunes de apertura:
'r'
: Lectura (por defecto). Abre el archivo para leer.'w'
: Escritura. Abre el archivo para escribir. Si el archivo existe, lo sobrescribe. Si no existe, lo crea.'a'
: Añadir (append). Abre el archivo para escribir, pero añade los datos al final del archivo en lugar de sobrescribirlo.'x'
: Creación exclusiva. Abre el archivo para escritura, pero solo si el archivo no existe.'b'
: Modo binario. Se utiliza en combinación con los modos anteriores para trabajar con archivos binarios.'t'
: Modo texto (por defecto). Se utiliza para trabajar con archivos de texto.'+'
: Actualización. Se utiliza en combinación con los modos anteriores para permitir tanto la lectura como la escritura.
Ejemplo de apertura de un archivo para lectura:
archivo = open('mi_archivo.txt', 'r')
Es crucial cerrar el archivo una vez que hayas terminado de trabajar con él. Esto libera los recursos del sistema y garantiza que los datos se escriban correctamente en el disco. Para cerrar un archivo, utiliza el método close()
:
archivo.close()
Una forma más elegante y segura de manejar archivos es utilizando la declaración with
. Esto asegura que el archivo se cierre automáticamente, incluso si se produce una excepción:
with open('mi_archivo.txt', 'r') as archivo:
# Realiza operaciones con el archivo aquí
# El archivo se cierra automáticamente al salir del bloque 'with'
Lectura y Escritura de Archivos de Texto
Para leer datos de un archivo de texto, puedes usar varios métodos:
read()
: Lee todo el contenido del archivo como una sola cadena.readline()
: Lee una sola línea del archivo.readlines()
: Lee todas las líneas del archivo y las devuelve como una lista de cadenas.
Ejemplo de lectura de un archivo línea por línea:
with open('mi_archivo.txt', 'r') as archivo:
for linea in archivo: print(linea.strip()) # Elimina los espacios en blanco al principio y al final de la línea
Para escribir datos en un archivo de texto, puedes usar los métodos write()
y writelines()
:
write(cadena)
: Escribe una cadena en el archivo.writelines(lista_de_cadenas)
: Escribe una lista de cadenas en el archivo.
Ejemplo de escritura en un archivo:
with open('mi_archivo.txt', 'w') as archivo:
archivo.write('Esta es la primera línea.\n')
archivo.write('Esta es la segunda línea.\n')
Asegúrate de incluir el carácter de nueva línea (\n
) al final de cada línea si quieres que aparezca en líneas separadas en el archivo.
Manejo de Archivos CSV y JSON
Python facilita el trabajo con archivos CSV (Comma Separated Values) y JSON (JavaScript Object Notation), que son formatos comunes para el intercambio de datos.
Para trabajar con archivos CSV, puedes usar el módulo csv
:
import csv # Escritura with open('mi_archivo.csv', 'w', newline='') as archivo_csv:
escritor_csv = csv.writer(archivo_csv) escritor_csv.writerow(['Nombre', 'Edad', 'Ciudad'])
escritor_csv.writerow(['Juan', '30', 'Madrid']) # Lectura
with open('mi_archivo.csv', 'r') as archivo_csv:
lector_csv = csv.reader(archivo_csv)
for fila in lector_csv:
print(fila)
El argumento newline=''
es importante para evitar líneas en blanco adicionales al escribir en el archivo.
Para trabajar con archivos JSON, puedes usar el módulo json
:
import json # Escritura
datos = { 'nombre': 'Ana', 'edad': 25, 'ciudad': 'Barcelona' }
with open('mi_archivo.json', 'w') as archivo_json:
json.dump(datos, archivo_json, indent=4) # Lectura
with open('mi_archivo.json', 'r') as archivo_json:
datos = json.load(archivo_json) print(datos)
El argumento indent=4
en json.dump()
formatea el JSON para que sea más legible.
Errores Comunes y Soluciones
Al trabajar con archivos, es común encontrarse con ciertos errores. Aquí hay algunos de los más comunes y cómo solucionarlos:
FileNotFoundError
: Este error ocurre cuando intentas abrir un archivo que no existe. Asegúrate de que el nombre del archivo sea correcto y que el archivo esté en la ubicación especificada.PermissionError
: Este error ocurre cuando no tienes permisos para acceder al archivo. Asegúrate de tener los permisos necesarios para leer o escribir en el archivo.IOError
: Este es un error de entrada/salida genérico que puede ocurrir por varias razones, como un disco lleno o un archivo dañado.UnicodeDecodeError
: Este error ocurre cuando intentas leer un archivo de texto con una codificación incorrecta. Especifica la codificación correcta al abrir el archivo usando el argumentoencoding
. Por ejemplo:open('mi_archivo.txt', 'r', encoding='utf-8')
.
Es importante manejar estos errores utilizando bloques try...except
para que tu programa no se interrumpa inesperadamente:
try:
with open('mi_archivo.txt', 'r') as archivo:
contenido = archivo.read()
print(contenido)
except FileNotFoundError:
print('El archivo no existe.')
except PermissionError:
print('No tienes permisos para acceder al archivo.')
except UnicodeDecodeError:
print('Error de codificación.')
La lectura y escritura de archivos es una habilidad esencial en Python. Con este artículo, has aprendido los fundamentos para abrir, leer, escribir y cerrar archivos, así como para manejar formatos comunes como CSV y JSON. Recuerda siempre cerrar tus archivos y manejar los posibles errores para garantizar la robustez de tus programas.
¡Ahora estás listo para aplicar estos conocimientos en tus proyectos y construir aplicaciones más potentes y versátiles!