Lendo arquivos de texto
Aprenda a abrir e ler informações salvas em arquivos.
Até agora, todas as informações do nosso programa viviam apenas enquanto ele estava rodando. Assim que o programa encerrava, tudo ia embora. Mas e se você precisasse guardar dados e lê-los depois? É aí que entram os arquivos.
Pense em um arquivo de texto como um caderno de anotações: o programa pode abrir esse caderno, ler o que está escrito e usar essas informações como quiser. Nesta lição, você vai aprender a fazer exatamente isso.
Abrindo um arquivo com open()
Em Python, para trabalhar com um arquivo, o primeiro passo é abri-lo usando a função open(). Ela funciona como abrir uma gaveta: você precisa especificar qual gaveta quer abrir e o que pretende fazer com ela.
arquivo = open("notas.txt", "r")
O primeiro argumento é o nome do arquivo (ou o caminho até ele) e o segundo é o modo de abertura. O modo "r" significa read (leitura) — você está dizendo ao Python que quer apenas ler o arquivo, sem modificá-lo.
Importante: o arquivo precisa existir antes de você tentar lê-lo. Se o arquivo não for encontrado, o Python gera um erro:
FileNotFoundError.
Lendo o conteúdo do arquivo
Depois de abrir o arquivo, existem três formas principais de ler o conteúdo.
Lendo tudo de uma vez com read()
O método read() carrega todo o conteúdo do arquivo como uma única string:
arquivo = open("notas.txt", "r")
conteudo = arquivo.read()
print(conteudo)
arquivo.close()
Imagine que o arquivo notas.txt contenha:
Matemática: 8.5
Português: 7.0
Ciências: 9.0
A saída será:
Matemática: 8.5
Português: 7.0
Ciências: 9.0
Lendo linha por linha com readline()
O método readline() lê uma linha de cada vez. Cada vez que você o chama, ele avança para a próxima linha, como se você estivesse passando o dedo por um caderno linha a linha:
arquivo = open("notas.txt", "r")
linha1 = arquivo.readline()
linha2 = arquivo.readline()
print(linha1)
print(linha2)
arquivo.close()
Saída:
Matemática: 8.5
Português: 7.0
Perceba as linhas em branco extras na saída. Isso acontece porque cada linha no arquivo já termina com
\n(quebra de linha), e oprint()adiciona outra. Para evitar isso, useprint(linha1.strip()).
Lendo todas as linhas com readlines()
O método readlines() retorna uma lista onde cada elemento é uma linha do arquivo. Útil quando você quer trabalhar com o arquivo como uma coleção de itens:
arquivo = open("notas.txt", "r")
linhas = arquivo.readlines()
arquivo.close()
print(linhas)
Saída:
['Matemática: 8.5\n', 'Português: 7.0\n', 'Ciências: 9.0\n']
Agora você pode usar um for para percorrer cada linha:
arquivo = open("notas.txt", "r")
linhas = arquivo.readlines()
arquivo.close()
for linha in linhas:
print(linha.strip()) # strip() remove o \n do final
Saída:
Matemática: 8.5
Português: 7.0
Ciências: 9.0
Se o arquivo for muito grande, carregar tudo com readlines() pode consumir muita memória. Nesses casos, percorrer o arquivo diretamente com um for é uma alternativa mais eficiente — veja a seguir."
Percorrendo um arquivo diretamente com for
Uma forma muito elegante e eficiente de ler arquivos em Python é usar o for diretamente no arquivo, sem precisar chamar nenhum método de leitura. O Python vai percorrer linha por linha automaticamente:
arquivo = open("notas.txt", "r")
for linha in arquivo:
print(linha.strip())
arquivo.close()
Saída:
Matemática: 8.5
Português: 7.0
Ciências: 9.0
Essa é geralmente a forma mais usada quando você quer processar um arquivo grande, porque o Python não carrega tudo na memória de uma vez — ele vai lendo conforme você percorre.
Não esqueça de fechar o arquivo!
Sempre que você abre um arquivo com open(), precisa fechá-lo com close() quando terminar. Isso libera o arquivo para o sistema operacional e garante que tudo foi gravado corretamente.
Deixar arquivos abertos é como abrir uma torneira e esquecer — nada trava imediatamente, mas com o tempo causa problemas.
arquivo = open("notas.txt", "r")
conteudo = arquivo.read()
arquivo.close() # Sempre feche ao terminar!
Na próxima lição, você vai aprender o
with open(), uma forma muito mais segura e prática que fecha o arquivo automaticamente para você.
O caminho do arquivo
Quando você escreve apenas "notas.txt", o Python procura o arquivo na mesma pasta em que o seu script está. Se o arquivo estiver em outro lugar, você precisa informar o caminho completo:
# Windows
arquivo = open("C:\\Users\\joao\\documentos\\notas.txt", "r")
# Usando barras normais (funciona no Windows também)
arquivo = open("C:/Users/joao/documentos/notas.txt", "r")
No Windows, use
\\(barra dupla) ou/(barra normal) nos caminhos. A barra simples\pode causar problemas porque o Python a interpreta como início de um caractere especial.
Quando você passa apenas o nome do arquivo (como "notas.txt"), isso é chamado de caminho relativo — o Python procura o arquivo a partir da pasta onde o script está sendo executado.
Conhecendo o enumerate()
Antes de ver o exemplo prático, vale apresentar uma função do Python que vai aparecer bastante quando trabalhamos com listas e arquivos: o enumerate().
Quando usamos um for numa lista, normalmente temos acesso apenas ao valor de cada item:
frutas = ["maçã", "banana", "uva"]
for fruta in frutas:
print(fruta)
Saída:
maçã
banana
uva
Mas e se você precisar exibir o número de cada item junto com o valor, como em uma lista numerada? Sem enumerate(), você teria que criar uma variável de controle manualmente:
frutas = ["maçã", "banana", "uva"]
numero = 1
for fruta in frutas:
print(f"{numero}. {fruta}")
numero += 1
O enumerate() faz isso de forma mais elegante. Ele percorre a lista e entrega dois valores a cada iteração: o número (índice) e o item:
frutas = ["maçã", "banana", "uva"]
for numero, fruta in enumerate(frutas, start=1):
print(f"{numero}. {fruta}")
Saída:
1. maçã
2. banana
3. uva
O parâmetro start=1 define que a contagem começa em 1 em vez de 0 (que é o padrão). Isso é útil para exibir listas de forma amigável ao usuário.
O nome
numero, frutaantes doiné chamado de desempacotamento: o Python automaticamente separa os dois valores retornados peloenumerate()e os coloca em variáveis distintas.
Exemplo prático: leitor de lista de compras
Vamos criar um programa que lê um arquivo de texto com uma lista de compras e exibe os itens de forma organizada:
Suponha que o arquivo compras.txt contenha:
arroz
feijão
macarrão
azeite
café
O programa:
def ler_lista(nome_arquivo):
arquivo = open(nome_arquivo, "r", encoding="utf-8")
itens = arquivo.readlines()
arquivo.close()
return itens
def exibir_lista(itens):
print("=== Lista de Compras ===")
for numero, item in enumerate(itens, start=1):
print(f"{numero}. {item.strip()}")
print(f"\nTotal de itens: {len(itens)}")
# Programa principal
lista = ler_lista("compras.txt")
exibir_lista(lista)
Saída:
=== Lista de Compras ===
1. arroz
2. feijão
3. macarrão
4. azeite
5. café
Total de itens: 5
O parâmetro
encoding="utf-8"garante que caracteres especiais como acentos (ã,é,ç) sejam lidos corretamente. É uma boa prática sempre informá-lo ao abrir arquivos de texto.
O que aprendemos nesta lição
Nesta lição, você aprendeu que:
- A função
open("arquivo.txt", "r")abre um arquivo para leitura — o modo"r"significa read. - O método
read()carrega todo o conteúdo do arquivo como uma única string. - O método
readline()lê uma linha por vez, avançando a cada chamada. - O método
readlines()retorna uma lista com todas as linhas do arquivo. - Usar o
fordiretamente no arquivo percorre linha por linha de forma eficiente, sem carregar tudo na memória. - Sempre que usar
open(), é preciso chamarclose()ao terminar. - O
enumerate()percorre uma lista entregando o número e o valor de cada item a cada iteração, sendo ideal para criar listas numeradas. Comstart=1, a contagem começa em 1. - O parâmetro
encoding="utf-8"garante que acentos e caracteres especiais sejam lidos corretamente.