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 TXTAbrir 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.