csv.DictReader transforma cada registro em um dicionário baseado no cabeçalho. Isso deixa o código mais legível do que depender de índices, mas CSV continua sendo texto: tipos, encoding e regras de negócio precisam ser definidos.
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)
Abra o arquivo com newline="", conforme a API do módulo, e declare encoding. Normalize somente campos cujo contrato permite isso. Uma coluna ausente gera um problema diferente de um valor vazio, portanto valide fieldnames antes de processar lotes grandes.
Boas práticas
Ao escrever, passe fieldnames ao DictWriter, chame writeheader() e escolha extrasaction conscientemente. Defina delimiter, quotechar e dialeto quando o produtor não usa o padrão. Não confie cegamente em Sniffer, pois sua detecção é heurística. Para planilhas abertas por usuários, avalie também fórmulas iniciadas por =, +, - ou @ antes da exportação.
O guia de arquivos TXT, CSV e JSON oferece uma visão mais ampla. Para caminhos portáveis, use as práticas de pathlib.
A documentação oficial do módulo csv, consultada em 22 de julho de 2026, detalha a API e suas garantias.