csv.DictReader convierte cada registro en un diccionario basado en el encabezado. Es más legible que depender de índices, pero CSV sigue siendo texto: tipos, encoding y reglas de negocio deben quedar explícitos.

import csv
from pathlib import Path

origem = Path("clientes.csv")

with origem.open(encoding="utf-8", newline="") as arquivo:
    leitor = csv.DictReader(arquivo)
    for linha in leitor:
        email = linha["email"].strip().lower()
        ativo = linha["ativo"].strip().lower() == "sim"
        print(email, ativo)

Abre el archivo con newline="", como indica la API, y declara el encoding. Normaliza solo los campos cuyo contrato lo permite. Una columna ausente no equivale a un valor vacío, así que valida fieldnames antes de procesar lotes grandes.

Buenas prácticas

Al escribir, pasa fieldnames a DictWriter, llama a writeheader() y elige extrasaction de forma consciente. Configura delimitador, comillas y dialecto si el productor no usa el estándar. No confíes ciegamente en Sniffer, porque es heurístico. Si usuarios abrirán el archivo como hoja de cálculo, evalúa valores que empiezan por =, +, - o @.

La guía de archivos TXT, CSV y JSON amplía el contexto. Para rutas portables, aplica pathlib.

La documentación oficial del módulo csv, consultada el 22 de julio de 2026, detalla la API y sus garantías.