Compreender o conceito
Processar um ficheiro linha a linha pode reduzir o conjunto de dados simultaneamente em memória. Isso não elimina a necessidade de limites de tamanho, encoding e validação. Um script deve devolver um código de saída que represente o resultado e produzir logs com contexto útil, sem expor segredos ou dados completos desnecessariamente.
Aplicar e decidir
Antes de repetir uma operação externa após timeout, pergunta se o efeito pode já ter ocorrido. Uma chave idempotente ou reconciliação pode ser necessária. Limita tentativas e espera entre elas; erros permanentes de validação não se resolvem com repetição infinita. Se a saída deve substituir um ficheiro, prepara-a e valida-a antes de publicar o resultado.
Aplicação guiada no trabalho
Num lote grande, itera csv.reader sem acumular todas as linhas, define encoding e newline="" ao abrir o ficheiro e usa o dialecto acordado. split(",") não interpreta um campo entre aspas que contém vírgulas. Limites de tamanho, validação e contagens de aceites e rejeitados continuam necessários. O log deve permitir ligar run_id, etapa e categoria de erro sem copiar informação pessoal desnecessária. O código de saída deve cumprir o contrato do escalonador: imprimir ERROR não altera por si só esse código. Para chamadas externas, distingue falha confirmada de resultado incerto. Mantém a identidade da operação, confirma o contrato de idempotência e usa espera, limite de tentativas e prazo. Se o resultado continuar desconhecido, comunica essa incerteza em vez de declarar sucesso.
Ambiente explícito no scheduler
Uma execução agendada deve ter intérprete, diretoria e dependências identificados. Um comando chamado por nome pode resolver para outra instalação; um caminho relativo pode apontar para outra diretoria. Definir env num subprocesso substitui a herança implícita pelo mapping fornecido. Ensaiar esse contexto evita depender do perfil pessoal de um operador. Guarda a referência e a categoria de falha, preservando a distinção entre configuração ausente e resultado funcional vazio.
Orçamento global e estado do scheduler
O orçamento de retoma inclui as tentativas e os intervalos entre elas. Três tentativas de cinco segundos com dois intervalos de dois segundos podem durar dezanove segundos; um contrato de catorze exige limitar pelo prazo restante. Também define o que chega ao scheduler: sys.exit(main()) espera um código adequado ou None, e uma string como ok produz código 1 e texto em stderr. Emite mensagens separadamente e devolve o inteiro zero apenas quando a condição de sucesso estiver satisfeita.
Um importador regista run_id, número de linhas aceites e rejeitadas e o estado final. Não escreve passwords nem o ficheiro inteiro no log.
Armadilhas comuns
Dividir CSV com split; acumular linhas enquanto se afirma streaming; repetir efeitos sem contrato.
Tópicos relacionados: Dados, tipos e decisões · Coleções sem surpresas
Uma automação útil deixa evidência e sabe como lidar com repetição e falha parcial.
Referência: Python 3.14: CSV reading and writing · Python 3.14; DR Python 2026.3