Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Capítulo 9: Manejo de Archivos

🧭 Navegación:

¡Bienvenido al departamento de archivos y documentación de nuestro almacén digital! El manejo de archivos es como tener un sistema de archivo empresarial donde podemos leer, escribir, organizar y procesar documentos de manera automática.

📁 ¿Qué es el manejo de archivos?

El manejo de archivos es la capacidad de interactuar con archivos del sistema: leer información de documentos existentes, crear nuevos archivos, y procesar grandes volúmenes de datos almacenados. Es como tener un asistente administrativo digital que puede:

  • Leer informes y extraer información importante
  • Generar documentos automáticamente
  • Procesar datos masivos de hojas de cálculo
  • Crear respaldos de información crítica
  • Organizar archivos según criterios específicos

🏢 Analogía del almacén: El departamento de documentación

Imagina que nuestro almacén tiene un departamento de documentación donde:

  • Los archivos de texto son como documentos y reportes escritos
  • Los archivos CSV son como hojas de cálculo con datos tabulares
  • Los archivos JSON son como formularios estructurados con información organizada
  • Python es nuestro asistente administrativo que puede leer, escribir y procesar todos estos documentos
  • Los métodos de archivo son las diferentes herramientas de oficina (lectores, impresoras, organizadores)

📄 Tipos de archivos en el almacén

📝 Archivos de texto (.txt)

  • Uso: Reportes, logs, notas, documentación
  • Características: Fáciles de leer y escribir, universales
  • Ejemplo práctico: Reportes diarios de inventario
# Ejemplo: Generar reporte diario de ventas
reporte_ventas = """
=== REPORTE DIARIO DE VENTAS ===
Fecha: 2024-01-15
Total vendido: $15,750.00
Productos más vendidos:
1. Laptop Gaming - 12 unidades
2. Mouse Inalámbrico - 25 unidades
3. Teclado Mecánico - 8 unidades

Observaciones:
- Incremento del 15% respecto a ayer
- Stock bajo en laptops gaming
"""

with open("reporte_ventas_2024_01_15.txt", "w", encoding="utf-8") as archivo:
    archivo.write(reporte_ventas)

📊 Archivos CSV (.csv)

  • Uso: Inventarios, listas de precios, datos de ventas
  • Características: Estructura tabular, compatible con Excel
  • Ejemplo práctico: Inventario de productos
import csv

# Ejemplo: Generar inventario en formato CSV
inventario_productos = [
    ["Codigo", "Nombre", "Categoria", "Precio", "Stock"],
    ["LAP001", "Laptop Gaming Pro", "Computadoras", 1299.99, 15],
    ["MOU001", "Mouse Inalámbrico", "Accesorios", 29.99, 45],
    ["TEC001", "Teclado Mecánico", "Accesorios", 89.99, 23],
    ["MON001", "Monitor 4K", "Pantallas", 399.99, 8]
]

with open("inventario_productos.csv", "w", newline="", encoding="utf-8") as archivo:
    escritor = csv.writer(archivo)
    escritor.writerows(inventario_productos)

📋 Archivos JSON (.json)

  • Uso: Configuraciones, APIs, datos estructurados
  • Características: Formato web, estructura anidada
  • Ejemplo práctico: Configuración del sistema
import json

# Ejemplo: Configuración del sistema de almacén
configuracion_sistema = {
    "almacen": {
        "nombre": "TechStore Central",
        "ubicacion": "Ciudad de México",
        "capacidad_maxima": 10000
    },
    "configuracion_ventas": {
        "impuesto_default": 0.16,
        "descuento_maximo": 0.30,
        "moneda": "MXN"
    },
    "alertas": {
        "stock_minimo": 5,
        "notificar_email": True,
        "email_admin": "admin@techstore.com"
    }
}

with open("configuracion_almacen.json", "w", encoding="utf-8") as archivo:
    json.dump(configuracion_sistema, archivo, indent=2, ensure_ascii=False)

🖄️ Flujo de trabajo con archivos

1. Planificación 📋

  • ¿Qué tipo de archivo necesito?
  • ¿Cómo estructuraré la información?
  • ¿El archivo ya existe o lo crearé nuevo?

2. Apertura 🔓

# Modos de apertura de archivos
"r"   # Lectura (archivo debe existir)
"w"   # Escritura (sobrescribe si existe)
"a"   # Añadir al final (append)
"r+"  # Lectura y escritura
"x"   # Creación exclusiva (falla si existe)

3. Procesamiento ⚙️

  • Leer contenido existente
  • Procesar y transformar datos
  • Generar nuevo contenido

4. Cierre seguro 🔒

# Siempre usar context managers
with open("archivo.txt", "r") as f:
    contenido = f.read()
# El archivo se cierra automáticamente

🚀 Casos de uso en el almacén

📋 Generación de reportes automáticos

def generar_reporte_inventario_bajo():
    """Genera reporte de productos con stock bajo"""
    productos_bajo_stock = []
    
    # Leer inventario actual
    with open("inventario.csv", "r") as f:
        reader = csv.DictReader(f)
        for producto in reader:
            if int(producto["Stock"]) < 10:
                productos_bajo_stock.append(producto)
    
    # Generar reporte
    with open("alerta_stock_bajo.txt", "w") as f:
        f.write("\n=== ALERTA: PRODUCTOS CON STOCK BAJO ===\n")
        for producto in productos_bajo_stock:
            f.write(f"- {producto['Nombre']}: {producto['Stock']} unidades\n")
    
    return len(productos_bajo_stock)

📊 Procesamiento de datos de ventas

def analizar_ventas_mensuales():
    """Analiza las ventas del mes y genera estadísticas"""
    ventas = []
    
    # Leer datos de ventas
    with open("ventas_enero.csv", "r") as f:
        reader = csv.DictReader(f)
        ventas = list(reader)
    
    # Procesar estadísticas
    total_ventas = sum(float(venta["Total"]) for venta in ventas)
    promedio_diario = total_ventas / 31  # enero tiene 31 días
    
    # Guardar análisis
    analisis = {
        "periodo": "Enero 2024",
        "total_ventas": total_ventas,
        "promedio_diario": promedio_diario,
        "numero_transacciones": len(ventas)
    }
    
    with open("analisis_enero_2024.json", "w") as f:
        json.dump(analisis, f, indent=2)
    
    return analisis

📋 Sistema de respaldos automáticos

import shutil
from datetime import datetime

def crear_respaldo_diario():
    """Crea respaldo diario de archivos importantes"""
    fecha_hoy = datetime.now().strftime("%Y%m%d")
    
    archivos_importantes = [
        "inventario.csv",
        "configuracion_almacen.json",
        "ventas_del_dia.csv"
    ]
    
    # Crear directorio de respaldo
    directorio_respaldo = f"respaldos/respaldo_{fecha_hoy}/"
    os.makedirs(directorio_respaldo, exist_ok=True)
    
    # Copiar archivos importantes
    for archivo in archivos_importantes:
        if os.path.exists(archivo):
            shutil.copy2(archivo, directorio_respaldo)
    
    print(f"Respaldo creado en: {directorio_respaldo}")

🎯 Contenido de este capítulo

En este capítulo construiremos nuestro departamento de documentación digital aprendiendo:

📄 Leer y escribir archivos de texto

  • Operaciones básicas con archivos
  • Context managers y buenas prácticas
  • Manejo de codificación (UTF-8, ASCII)
  • Procesamiento de logs y reportes

📊 Trabajar con CSV

  • Módulo csv de Python
  • Lectura y escritura de datos tabulares
  • Procesamiento de inventarios y ventas
  • Integración con Excel y hojas de cálculo

📋 Trabajar con JSON

  • Formato JSON para datos estructurados
  • Serialización y deserialización
  • Configuraciones y APIs
  • Intercambio de datos entre sistemas

🛡️ Mejores prácticas para manejo de archivos

Siempre usar context managers

# ✅ Correcto
with open("archivo.txt", "r") as f:
    contenido = f.read()
# El archivo se cierra automáticamente

# ❌ Incorrecto
f = open("archivo.txt", "r")
contenido = f.read()
# ¿Qué pasa si ocurre un error antes de cerrar?

Especificar codificación

# ✅ Siempre especifica encoding
with open("archivo.txt", "r", encoding="utf-8") as f:
    contenido = f.read()

Manejar errores apropiadamente

try:
    with open("archivo_importante.txt", "r") as f:
        datos = f.read()
except FileNotFoundError:
    print("El archivo no existe, creando uno nuevo...")
    with open("archivo_importante.txt", "w") as f:
        f.write("Contenido inicial")
except PermissionError:
    print("No tienes permisos para acceder al archivo")

Validar datos antes de procesar

def procesar_archivo_ventas(nombre_archivo):
    """Procesa archivo de ventas con validaciones"""
    
    # Verificar que el archivo existe
    if not os.path.exists(nombre_archivo):
        raise FileNotFoundError(f"No se encuentra el archivo: {nombre_archivo}")
    
    # Verificar que no está vacío
    if os.path.getsize(nombre_archivo) == 0:
        raise ValueError("El archivo está vacío")
    
    # Procesar contenido
    with open(nombre_archivo, "r", encoding="utf-8") as f:
        # ... procesamiento seguro
        pass

🚀 Lo que lograrás en este capítulo

Al finalizar este capítulo, tendrás:

  • Dominio de archivos de texto: Leer, escribir y procesar documentos
  • Manejo profesional de CSV: Procesar datos tabulares como Excel
  • Competencia en JSON: Trabajar con APIs y configuraciones
  • Automatización de reportes: Generar documentos automáticamente
  • Sistema de respaldos: Proteger información importante
  • Procesamiento masivo: Manejar grandes volúmenes de datos

🎯 Preparando tu oficina digital

Antes de comenzar, ten en cuenta que el manejo de archivos es fundamental para la automatización:

  • Entrada de datos: Los archivos son la principal fuente de información
  • Salida de resultados: Generar reportes y documentos finales
  • Persistencia: Guardar información entre ejecuciones del programa
  • Integración: Comunicarse con otros sistemas y herramientas

¡Comencemos a construir tu departamento de documentación digital que automatizará todo el papeleo de tu almacén!


🧭 Navegación:

En este capítulo: