Módulo 15 - Arquivos de texto

Lendo arquivos: read, linha a linha e o arquivo que não existe

10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Abrir um arquivo no modo r e ler todo o conteúdo com read.
  • Percorrer um arquivo linha a linha com o for.
  • Limpar o caractere de nova linha de cada linha lida usando strip.
  • Tratar o FileNotFoundError com try e except quando o arquivo não existe.

Lendo tudo de uma vez com read

Para ler, o ritual é o mesmo da escrita, mudando só a letra: open com o modo "r", de read, e depois o método de leitura. O mais direto é o read, que devolve o conteúdo inteiro do arquivo como um único texto, pronto para guardar numa variável ou mostrar com print. Crie um compras.txt como o da aula passada e leia de volta.

arquivo = open("compras.txt", "r")
conteudo = arquivo.read()
arquivo.close()

print(conteudo)

# Saída:
# Arroz
# Feijão
# Café

O read entrega o arquivo inteiro numa variável de texto. As quebras de linha vêm junto.

Repare que a variável conteudo é um texto comum, do tipo str que você domina desde o módulo 4. Tudo o que você aprendeu sobre textos vale para ela: medir com len, procurar com in, fatiar, converter. O read é ótimo quando você quer o arquivo inteiro de uma vez, para mostrar na tela ou procurar uma palavra. Quando o objetivo é tratar cada linha como uma informação separada, existe um jeito mais elegante, e ele é o assunto da próxima seção.

Linha a linha com o for

Aqui o Python mostra a elegância que o tornou famoso: um arquivo aberto pode ser percorrido pelo for, exatamente como uma lista. Cada volta do laço entrega uma linha. Se o seu arquivo segue o padrão de uma informação por linha, esse é o jeito natural de processá-lo: ler um item, tratar, passar para o próximo. É o mesmo for do módulo 9, aplicado a uma fonte nova.

arquivo = open("compras.txt", "r")
for linha in arquivo:
    print("Item:", linha)
arquivo.close()

# Saída (repare nas linhas em branco extras):
# Item: Arroz
#
# Item: Feijão
#
# Item: Café

O for entrega uma linha por volta. Mas de onde vieram essas linhas em branco?

As linhas em branco na saída têm explicação: cada linha lida do arquivo vem com o caractere de nova linha grudado no fim, aquele mesmo que você escreveu na aula 2. Quando o print adiciona a quebra dele por cima, o resultado é o espaçamento duplo. A limpeza é responsabilidade sua, e a ferramenta é velha conhecida do módulo 12: o strip, que remove espaços e quebras das pontas do texto.

arquivo = open("compras.txt", "r")
for linha in arquivo:
    item = linha.strip()
    print("Item:", item)
arquivo.close()

# Saída:
# Item: Arroz
# Item: Feijão
# Item: Café

linha.strip() tira a quebra de linha da ponta. Saída limpa, um item por linha.

Quando o arquivo não existe

Falta encarar a diferença mais importante entre ler e escrever. Os modos w e a criam o arquivo quando ele não existe; o modo r, não. Ler exige que o arquivo esteja lá, e se não estiver o Python levanta um erro com nome autoexplicativo: FileNotFoundError, arquivo não encontrado. É um erro comum de verdade: basta rodar o script numa pasta diferente, ou tentar ler um arquivo que o programa ainda não teve a chance de criar.

A boa notícia é que você já tem a ferramenta certa, recém-saída do módulo 14: o try/except. Em vez de deixar o programa quebrar com uma tela vermelha, você tenta ler dentro do try e trata o FileNotFoundError no except, com uma mensagem amigável ou um comportamento alternativo. É a primeira vez que dois módulos do curso se encaixam assim, e não será a última.

try:
    arquivo = open("tarefas.txt", "r")
    for linha in arquivo:
        print(linha.strip())
    arquivo.close()
except FileNotFoundError:
    print("Nenhuma tarefa cadastrada ainda.")

Se o tarefas.txt não existe, o programa não quebra: avisa com educação e segue a vida.

Leia esse exemplo com atenção, porque ele é um padrão profissional em miniatura: o arquivo que ainda não existe não é um defeito, é um estado esperado do programa, e o except transforma o erro numa resposta educada. A prática da aula 6 usa exatamente essa estrutura para a lista de tarefas funcionar de primeira, mesmo antes de qualquer tarefa ter sido salva.

Teste rápido

O que acontece ao executar open("dados.txt", "r") se o dados.txt não existe?

Perguntas frequentes

Qual a diferença entre read e ler com o for?
O read devolve o arquivo inteiro num único texto, bom para mostrar tudo ou procurar uma palavra. O for entrega uma linha por vez, ideal quando cada linha é uma informação separada, como itens de uma lista. Para arquivos grandes, o for também gasta menos memória, porque não carrega tudo de uma vez.
Por que aparecem linhas em branco quando faço print de cada linha lida?
Porque cada linha vem do arquivo com o caractere de quebra no fim, e o print adiciona outra quebra por conta própria. Ficam duas, e a saída sai com espaçamento duplo. O conserto é chamar strip na linha antes do print.
O strip apaga a quebra de linha do arquivo original?
Não. O strip devolve uma cópia limpa do texto; o arquivo no disco continua intacto. Aliás, ler um arquivo nunca modifica o conteúdo dele: para alterar algo no disco, é preciso abrir em modo de escrita.
Posso guardar as linhas do arquivo numa lista?
Pode, e é um padrão comum: crie uma lista vazia e, dentro do for, use append com linha.strip(). No fim, você tem uma lista de textos para usar como quiser, com tudo o que aprendeu no módulo 10. A prática da aula 6 faz exatamente isso.
E se eu chamar read duas vezes seguidas no mesmo arquivo?
A segunda chamada devolve um texto vazio. A leitura funciona como um marcador de página: o primeiro read vai até o fim e o marcador fica lá. Para ler de novo, o caminho simples é fechar e abrir o arquivo outra vez.
FileNotFoundError também acontece na escrita?
Com w e a apontando para uma pasta existente, não: esses modos criam o arquivo que falta. O erro aparece na escrita apenas se o caminho passar por uma pasta que não existe, por exemplo dados/notas.txt sem a pasta dados. Criar a pasta antes resolve.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.