Saltar al contenido
Portada » Lenguajes » 9. Trabajo con Archivos

9. Trabajo con Archivos

Trabajo con Archivos. En este capítulo aprenderemos a manejar archivos en Python, una habilidad esencial para desarrollar aplicaciones que interactúan con datos externos. Exploraremos cómo abrir, leer, escribir y cerrar archivos de texto, así como trabajar con formatos específicos como CSV y JSON que son ampliamente utilizados para almacenar y transferir información estructurada. También veremos cómo gestionar archivos y directorios en el sistema operativo, incluyendo creación, eliminación y navegación por rutas. Este capítulo te proporcionará las herramientas necesarias para interactuar eficientemente con el sistema de archivos y manipular datos de manera profesional y segura.

Manos a la obra….

Lectura y Escritura de Archivos

La operación más básica al trabajar con archivos en Python es abrir un archivo utilizando la función open(), que permite especificar el modo en el que se desea abrir el archivo. Los modos más comunes son:

  • 'r': Modo de lectura (por defecto).
  • 'w': Modo de escritura (sobrescribe el archivo si ya existe).
  • 'a': Modo de anexado (añade contenido al final del archivo).
  • 'b': Modo binario (para archivos que no de texto).
  • 'x': Modo de creación (crea un nuevo archivo y genera un error si ya existe).
Ejemplo de escritura de un archivo:
# Abrir un archivo en modo escritura
with open('archivo.txt', 'w') as archivo:
archivo.write("Hola, mundo!\n")
archivo.write("Este es un archivo de texto.\n")

En este ejemplo abrimos el archivo con nombre «archivo.txt» en modo escritura y posteriormente escribimos dentro de él el texto «Hola, mundo!\n» y en la siguiente línea «Este es un archivo de texto.\n».

Fíjate en el \n, esto se llama carácter de escape y lo que hace es insertar un salto de línea. Existen otros caracteres de escape como pueden ser \t para tabulador, \r retorno de carro, \b retroceso,…

Ejemplo de lectura de un archivo:
# Abrir un archivo en modo lectura
with open('archivo.txt', 'r') as archivo:
contenido = archivo.read()
print(contenido)

El método read() lee todo el contenido del archivo. También se pueden usar otros métodos como readline() para leer una línea a la vez o readlines() para leer todas las líneas y devolverlas como una lista.

Cierre de archivos.

Cuando trabajamos con archivos, es muy recomendable cerrarlos una vez finalizadas las operaciones que estemos ejecutando. En muchas ocasiones, cuando se realiza una escritura de datos en disco, esta operación no es instantánea y pasan primero por un buffer hasta que el sistema operativo ejecuta la acción. Con el método close() nos aseguramos de que se terminen de escribir esos datos almacenados en la memoria temporal y así evitar posibles pérdidas.

# Abrimos un archivo en modo de escritura
archivo = open("ejemplo.txt", "w")

# Escribimos texto en el archivo
archivo.write("¡Hola, este es un ejemplo de escritura en un archivo!")

# Cerramos el archivo
archivo.close()

# Verificamos que el archivo se cerró correctamente
if archivo.closed:
    print("El archivo ha sido cerrado correctamente.")

Archivos CSV

Los archivos CSV (Comma-Separated Values) son un formato común para almacenar datos en forma de tabla. Python incluye el módulo csv para facilitar la lectura y escritura de archivos CSV.

Ejemplo de escritura en un archivo CSV:
import csv

# Datos a escribir
datos = [
["Nombre", "Edad", "Ciudad"],
["Ana", 28, "Madrid"],
["Luis", 34, "Barcelona"]
]

# Abrir un archivo CSV en modo escritura
with open('datos.csv', 'w', newline='') as archivo_csv:
escritor = csv.writer(archivo_csv)
escritor.writerows(datos) # Escribir varias filas

El parámetro newline='' es necesario en Windows para evitar líneas en blanco adicionales en el archivo CSV.

Ejemplo de lectura de un archivo CSV:
import csv

# Abrir un archivo CSV en modo lectura
with open('datos.csv', 'r') as archivo_csv:
datos = csv.reader(archivo_csv)
for fila in datos:
print(fila)

Este código leerá el archivo CSV y mostrará cada una de las filas.

Escritura en un archivo CSV

Para escribir datos en un archivo CSV debemos partir de una estructura de datos (una tabla). Para ello vamos a crear una lista de listas.

import csv

# Definimos los datos que queremos escribir en el archivo
datos = [
["Nombre", "Edad", "Ciudad"],
["Ana", 25, "Madrid"],
["Carlos", 30, "Barcelona"],
["Lucía", 28, "Valencia"]
]

# Abrimos el archivo en modo escritura
with open("personas.csv", mode="w", newline="", encoding="utf-8") as archivo_csv:
# Creamos un objeto writer para escribir en el archivo CSV
archivo = csv.writer(archivo_csv)

# Escribimos las filas en el archivo
for fila in datos:
archivo.writerow(fila)

print("Archivo CSV creado con éxito.")

Explicación

  1. Importamos el módulo csv de la biblioteca estándar para trabajar con archivos CSV de forma sencilla.
  2. Creamos una lista de listas donde cada sublista representa una fila del archivo CSV. La primera fila generalmente se utiliza como encabezado.
  3. Abrimos el archivo csv con el método open y con el modo "w" (escritura) para abrir o crear el archivo personas.csv.
    • Usamos newline="" para evitar líneas en blanco adicionales que pueden aparecer en algunos sistemas.
    • Indicamos la codificación utf-8 para soportar caracteres especiales.
  4. Creamos el objeto «archivo» con el método csv.writer que permite escribir filas en el archivo CSV.
  5. Escribimos cada fila en el archivo utilizando el método writer.writerow.
  6. Contexto with:
    La estructura with asegura que el archivo se cierre automáticamente una vez que finaliza el bloque, incluso si ocurre un error

Con este ejemplo hemos generado un archivo personas.csv con el siguiente contenido:

Nombre,Edad,Ciudad 

Ana,25,Madrid

Carlos,30,Barcelona

Lucía,28,Valencia

Archivos JSON

Los archivos JSON (JavaScript Object Notation) son un formato de intercambio de datos ligero, fácil de leer para los humanos y sencillo de procesar para las máquinas. Representan datos estructurados como pares clave-valor y listas ordenadas (similares a los diccionarios y listas que vimos en un capítulo anterior).

Un archivo JSON es simplemente un archivo de texto con una extensión .json que contiene datos en este formato.

Ejemplo de archivo JSON

{
"nombre": "Ana",
"edad": 25,
"ciudad": "Madrid",
"hobbies": ["leer", "viajar", "música"]
}

¿Para qué se utilizan los archivos JSON?

  1. Intercambio de datos entre sistemas:
    JSON es ampliamente utilizado para enviar y recibir datos entre aplicaciones, especialmente en APIs web. Por ejemplo cuando accedes a un servicio web para obtener información de una API de clima, los datos se suelen devolver en formato JSON.
  2. Almacenamiento de datos estructurados:
    Los archivos JSON son útiles para guardar configuraciones, datos de usuarios o cualquier tipo de información estructurada que necesite persistir entre ejecuciones de un programa como puede ser la configuración de aplicaciones, datos de juegos, preferencias de usuarios, etc.
  3. Facilidad de integración con lenguajes de programación:
    JSON es compatible con muchos lenguajes de programación lo que lo convierte en una opción estándar para el intercambio de información.

Ventajas de JSON

  • Legibilidad: Es fácil de entender para los humanos.
  • Compacto: Ocupa menos espacio comparado con formatos como XML.
  • Flexibilidad: Puede representar datos simples (números, cadenas) o estructuras complejas (listas anidadas, diccionarios).
  • Compatibilidad: Es un estándar ampliamente aceptado.

Veamos como manejamos estos tipos de datos en Python.

Ejemplo de escritura en un archivo JSON:
import json

# Datos a escribir
datos = {
"nombre": "Ana",
"edad": 28,
"ciudad": "Madrid"
}

# Abrir un archivo JSON en modo escritura
with open('datos.json', 'w') as archivo_json:
json.dump(datos, archivo_json, indent=4) # Escribir con formato legible

El método dump() convierte el objeto Python en una cadena JSON y lo escribe en el archivo.

Ejemplo de lectura de un archivo JSON:
import json

# Abrir un archivo JSON en modo lectura
with open('datos.json', 'r') as archivo_json:
datos_leidos = json.load(archivo_json) # Cargar datos desde el archivo
print(datos_leidos)

El método load() lee el archivo JSON y convierte su contenido en un objeto Python.

Otro tipo de archivos para almacenamiento de datos es XLS pero es algo más complejo y por ahora no lo vamos a abordar. Tea adjunto una pequeña comparativa entre estos formatos.

Comparación con otros formatos

CaracterísticaJSONXMLCSV
LegibilidadAltaMediaBaja (para datos complejos)
Soporte jerárquicoNo
SimplicidadAltaBajaAlta

Manejo de Archivos y Directorios

Además de trabajar con archivos individuales, es común necesitar realizar operaciones en directorios, como crear, renombrar, eliminar o listar archivos y carpetas. Python proporciona el módulo os y shutil para gestionar estas tareas.

Ejemplo de manejo de directorios:
import os

# Crear un nuevo directorio
os.mkdir('nuevo_directorio')

# Listar archivos y directorios en el directorio actual
for nombre in os.listdir('.'):
print(nombre)

# Renombrar un archivo
os.rename('archivo.txt', 'archivo_renombrado.txt')

# Eliminar un archivo
os.remove('archivo_renombrado.txt')

# Eliminar un directorio
os.rmdir('nuevo_directorio')

El uso de os te permite interactuar con el sistema de archivos de manera efectiva.

Uso del módulo shutil para copiar y mover archivos:
import shutil

# Copiar un archivo
shutil.copy('datos.csv', 'copia_datos.csv')

# Mover un archivo
shutil.move('copia_datos.csv', 'nuevo_directorio/copia_datos.csv')

Resumen

El trabajo con archivos en Python es una habilidad fundamental que permite leer y escribir datos en diferentes formatos. Ya sea manipulando archivos de texto simples, trabajando con formatos tabulares como CSV o intercambiando datos estructurados con JSON. Python proporciona herramientas eficientes para manejar todos estos tipos de archivos. Además, con módulos como os y shutil, puedes gestionar directorios y realizar operaciones de archivos de manera efectiva, facilitando el desarrollo de aplicaciones que interactúan con el sistema de archivos.


Ejercicio 1: Leer un archivo de texto y contar las líneas

Crea un programa en Python que lea un archivo de texto llamado datos.txt y cuente cuántas líneas tiene. Si el archivo no existe, el programa debe manejar el error y mostrar un mensaje apropiado.
# Intentamos abrir y leer el archivo
try:
    with open("datos.txt", "r", encoding="utf-8") as archivo:
        lineas = archivo.readlines()
        print(f"El archivo tiene {len(lineas)} líneas.")
except FileNotFoundError:
    print("El archivo 'datos.txt' no existe. Por favor, verifica el nombre o la ubicación del archivo.")

Explicación:

  • Apertrua del archivo: Como tenemos que asegurarnos que el programa no falle si el archivo no existe, debemos ejecutar la apertura del archivo y manejo de errores con las sentencias tryexcept.
  • Lectura del archivo: Se usa open en modo lectura ("r") para abrir el archivo. La función readlines lee todas las líneas y las devuelve como una lista.
  • Conteo de líneas: Usamos len(lineas) para calcular la cantidad de líneas.
  • Manejo de errores: Si el archivo no existe, el bloque except FileNotFoundError captura el error y muestra un mensaje amigable al usuario.
Ejercicio 2: Escribir datos en un archivo JSON

Escribe un programa que cree un archivo usuarios.json con información sobre tres usuarios, incluyendo su nombre, edad y correo electrónico.
import json

# Datos a guardar
usuarios = [
    {"nombre": "Ana", "edad": 25, "correo": "ana@example.com"},
    {"nombre": "Carlos", "edad": 30, "correo": "carlos@example.com"},
    {"nombre": "Lucía", "edad": 28, "correo": "lucia@example.com"}
]

# Escribimos los datos en un archivo JSON
with open("usuarios.json", "w", encoding="utf-8") as archivo_json:
    json.dump(usuarios, archivo_json, indent=4)

print("El archivo 'usuarios.json' ha sido creado con éxito.")

Explicación:

  • Uso del módulo json: El método json.dump se utiliza para guardar los datos en formato JSON en un archivo.
  • Indentación: El parámetro indent=4 hace que el JSON sea más legible al agregar saltos de línea y sangrías (Este parámetro no es obligatorio).
  • Estructura de datos: La lista de diccionarios representa la información de los usuarios.
Ejercicio 3: Leer un archivo CSV y calcular el promedio de una columna

Crea un programa que lea un archivo calificaciones.csv, donde cada fila contiene el nombre de un estudiante y su calificación. Calcula el promedio de las calificaciones y muéstralo en pantalla.

Ejemplo del contenido del archivo calificacionies.csv
Nombre,Calificación
Ana,8.5
Carlos,9.0
Lucía,7.8
Pedro,9.2
import csv

try:
    # Abrimos el archivo CSV
    with open("calificaciones.csv", "r", encoding="utf-8") as archivo_csv:
        lector = csv.reader(archivo_csv)
        next(lector)  # Saltamos la fila de encabezados

        calificaciones = []
        for fila in lector:
            # Agregamos la calificación (convertida a float) a la lista
            calificaciones.append(float(fila[1]))

        # Calculamos el promedio
        promedio = sum(calificaciones) / len(calificaciones)
        print(f"El promedio de las calificaciones es: {promedio:.2f}")

except FileNotFoundError:
    print("El archivo 'calificaciones.csv' no existe.")
except ValueError:
    print("Se encontraron datos no válidos en el archivo.")

Explicación:

  1. Lectura del archivo CSV: Usamos csv.reader para leer el archivo línea por línea.
  2. Salto de encabezados: La función next(lector) omite la primera fila, que contiene los nombres de las columnas.
  3. Conversión de datos: Convertimos las calificaciones de cadenas a flotantes antes de agregarlas a una lista.
  4. Cálculo del promedio: Se usa sum para sumar los valores y len para contar cuántos hay.
  5. Manejo de errores:
    • FileNotFoundError para verificar si el archivo existe.
    • ValueError en caso de que haya datos no numéricos en el archivo.

Bibliografía de Python de interés.

Logo Python, enlace a la web oficial de Python.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *