Volver al curso

Python Desde Cero

leccion
18 / 21
beginner
20 horas
Python para el Mundo Real

Manejo de Archivos: Lee y Escribe CSV, JSON y TXT

Lectura
25 min~5 min lectura

Manejo de Archivos: Lee y Escribe CSV, JSON y TXT

Uno de los usos mas comunes de Python es leer y escribir archivos. Ya sea para procesar datos, guardar configuraciones o generar reportes, el manejo de archivos es una habilidad esencial.

Trabajar con archivos TXT

Abrir y leer archivos

Python usa la funcion open() para abrir archivos. El patron recomendado es usar el context manager with:

# Leer todo el archivo de una vez
with open('mi_archivo.txt', 'r', encoding='utf-8') as f:
    contenido = f.read()
    print(contenido)

# Leer linea por linea
with open('mi_archivo.txt', 'r', encoding='utf-8') as f:
    for linea in f:
        print(linea.strip())  # strip() elimina saltos de linea

# Leer todas las lineas como lista
with open('mi_archivo.txt', 'r', encoding='utf-8') as f:
    lineas = f.readlines()
    print(f'Total de lineas: {len(lineas)}')

Modos de apertura:

  • 'r' = leer (default)
  • 'w' = escribir (sobreescribe)
  • 'a' = agregar al final
  • 'x' = crear (falla si ya existe)

Escribir archivos

# Escribir (sobreescribe si existe)
with open('reporte.txt', 'w', encoding='utf-8') as f:
    f.write('Reporte de Ventas\n')
    f.write('=' * 30 + '\n')
    f.write('Total: $5,000\n')

# Agregar al final
with open('log.txt', 'a', encoding='utf-8') as f:
    f.write('2026-02-21 10:30: Sistema iniciado\n')
    f.write('2026-02-21 10:31: Usuario autenticado\n')

Caso real: Procesar un log de servidor

def analizar_log(archivo):
    errores = []
    advertencias = []
    info = []
    
    try:
        with open(archivo, 'r', encoding='utf-8') as f:
            for linea in f:
                linea = linea.strip()
                if 'ERROR' in linea:
                    errores.append(linea)
                elif 'WARNING' in linea:
                    advertencias.append(linea)
                elif 'INFO' in linea:
                    info.append(linea)
        
        print(f'Errores: {len(errores)}')
        print(f'Advertencias: {len(advertencias)}')
        print(f'Info: {len(info)}')
        
        if errores:
            print('Ultimos 3 errores:')
            for e in errores[-3:]:
                print(f'  {e}')
        
        return {'errores': errores, 'advertencias': advertencias, 'info': info}
    
    except FileNotFoundError:
        print(f'Archivo no encontrado: {archivo}')
        return None

resultado = analizar_log('servidor.log')
Trabajar con archivos CSV

CSV (Comma-Separated Values) es el formato mas comun para datos tabulares. Python tiene el modulo csv incluido.

import csv

# Escribir CSV
ventas = [
    ['Producto', 'Cantidad', 'Precio', 'Total'],
    ['Laptop', 5, 800, 4000],
    ['Mouse', 50, 25, 1250],
    ['Teclado', 30, 60, 1800],
    ['Monitor', 10, 400, 4000],
]

with open('ventas.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerows(ventas)

print('CSV creado exitosamente')

# Leer CSV
with open('ventas.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    next(reader)  # Saltar el encabezado
    for fila in reader:
        producto, cantidad, precio, total = fila
        print(f'{producto}: {cantidad} unidades = {total}')

csv.DictReader y DictWriter (recomendado)

import csv

# Escribir con diccionarios
productos = [
    {'nombre': 'Laptop', 'precio': 800, 'stock': 10},
    {'nombre': 'Mouse', 'precio': 25, 'stock': 50},
    {'nombre': 'Monitor', 'precio': 400, 'stock': 5},
]

with open('productos.csv', 'w', newline='', encoding='utf-8') as f:
    campos = ['nombre', 'precio', 'stock']
    writer = csv.DictWriter(f, fieldnames=campos)
    writer.writeheader()
    writer.writerows(productos)

# Leer con diccionarios (mas legible)
with open('productos.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for fila in reader:
        print(f"{fila['nombre']}: ${fila['precio']} (stock: {fila['stock']})")

Caso real: Analizar ventas de CSV

import csv
from collections import defaultdict

def analizar_ventas_csv(archivo):
    ventas_por_region = defaultdict(float)
    ventas_por_producto = defaultdict(int)
    total_global = 0
    
    try:
        with open(archivo, 'r', encoding='utf-8') as f:
            reader = csv.DictReader(f)
            for fila in reader:
                monto = float(fila['monto'])
                region = fila['region']
                producto = fila['producto']
                
                ventas_por_region[region] += monto
                ventas_por_producto[producto] += 1
                total_global += monto
        
        print(f'Total global: {total_global:.2f}')
        print('Por region:')
        for region, total in sorted(ventas_por_region.items()):
            print(f'  {region}: {total:.2f}')
        print('Productos mas vendidos:')
        for prod, cant in sorted(ventas_por_producto.items(), key=lambda x: x[1], reverse=True)[:3]:
            print(f'  {prod}: {cant} ventas')
    
    except FileNotFoundError:
        print(f'Archivo no encontrado: {archivo}')

analizar_ventas_csv('ventas_2026.csv')
Trabajar con archivos JSON

JSON es el formato estandar para intercambio de datos en APIs y aplicaciones web.

import json

# Escribir JSON
config = {
    'version': '2.0',
    'base_url': 'https://api.ejemplo.com',
    'timeout': 30,
    'debug': False,
    'servicios': [
        {'nombre': 'usuarios', 'activo': True},
        {'nombre': 'productos', 'activo': True},
        {'nombre': 'reportes', 'activo': False}
    ]
}

with open('config.json', 'w', encoding='utf-8') as f:
    json.dump(config, f, indent=4, ensure_ascii=False)

print('JSON guardado')

# Leer JSON
with open('config.json', 'r', encoding='utf-8') as f:
    datos = json.load(f)

print(f"Version: {datos['version']}")
print(f"URL base: {datos['base_url']}")
print(f"Debug: {datos['debug']}")

for servicio in datos['servicios']:
    estado = 'activo' if servicio['activo'] else 'inactivo'
    print(f"  {servicio['nombre']}: {estado}")

JSON strings vs archivos

import json

# De Python a string JSON
usuario = {'nombre': 'Ana', 'edad': 28, 'ciudad': 'CABA'}
json_string = json.dumps(usuario, indent=2)
print(json_string)

# De string JSON a Python
json_data = '{"nombre": "Carlos", "nota": 9.5}'
datos = json.loads(json_data)
print(f"{datos['nombre']} tiene {datos['nota']} de nota")
pathlib: La forma moderna de manejar rutas
from pathlib import Path

ruta = Path('documentos') / 'ventas' / 'reporte.txt'
print(ruta)              # documentos/ventas/reporte.txt
print(ruta.stem)         # reporte
print(ruta.suffix)       # .txt
print(ruta.parent)       # documentos/ventas

# Verificar existencia
if ruta.exists():
    print('El archivo existe')

# Listar archivos de un directorio
carpeta = Path('.')
for archivo in carpeta.glob('*.json'):
    print(archivo)

# Leer y escribir con pathlib
archivo = Path('mi_texto.txt')
archivo.write_text('Hola Python', encoding='utf-8')
contenido = archivo.read_text(encoding='utf-8')
print(contenido)
💡 Concepto Clave

Revisemos los puntos más importantes de esta lección antes de continuar.

Resumen

  • Usa with para abrir archivos (se cierran automaticamente)
  • TXT: open(), read(), write()
  • CSV: modulo csv, DictReader y DictWriter son lo mas practico
  • JSON: json.load()/dump() para archivos, json.loads()/dumps() para strings
  • pathlib.Path hace el manejo de rutas mas seguro y legible

En la proxima leccion aprenderemos automatizacion con Python.

🧠 Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
  • Comprendo el concepto principal y puedo explicarlo con mis palabras
  • Entiendo cómo aplicarlo en mi situación específica
  • Necesito repasar algunas partes antes de continuar
  • Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.