Python: Entrada e Saída de Arquivos
Última atualização: 2026-09-22
Até agora, os dados do nosso programa só existiam na memória — feche o programa, e os dados são perdidos. E/S de arquivos permite que programas salvem dados em disco e os leiam de volta na próxima inicialização. Esta é uma capacidade fundamental para qualquer aplicação prática.
1. Abrindo e Fechando Arquivos
A operação básica de arquivo tem três etapas: abrir -> ler/escrever -> fechar.
▶ Exemplo: Abrindo e Fechando um Arquivo Manualmente
▶ ExperimenteSaída:
# Executed successfully
close()! Arquivos abertos consomem recursos do sistema. Esquecer de fechar pode levar à corrupção de arquivos ou exaustão de recursos. Mas não se preocupe — a próxima seção tem uma abordagem melhor.
2. A Declaração with (Context Manager)
A declaração with fecha automaticamente o arquivo ao final do bloco de código, sem precisar chamar close():
▶ Exemplo: E/S Segura de Arquivo com with
▶ ExperimenteSaída:
# Executed successfully
with para operações de arquivo. É a forma mais segura e pytônica — o arquivo é corretamente fechado independentemente de ocorrer ou não uma exceção no bloco de código.
3. Modos de Abertura de Arquivo
O segundo parâmetro de open() é o modo:
| Modo | Significado | Arquivo Existe | Arquivo Não Existe |
|---|---|---|---|
"r" |
Leitura (padrão) | Lê normalmente | Erro |
"w" |
Escrita | Limpa e escreve | Cria |
"a" |
Adicionar | Adiciona ao final | Cria |
"x" |
Criação exclusiva | Erro | Cria |
"r+" |
Leitura e escrita | Legível e gravável | Erro |
▶ Exemplo: Diferentes Modos de Abertura de Arquivo
▶ ExperimenteSaída:
Primeira linha
Segunda linha
Terceira linha
4. Formas de Ler Arquivos
▶ Exemplo: Três Formas de Ler um Arquivo
# Suponha conteúdo do arquivo:
# Primeira linha
# Segunda linha
# Terceira linha
# Método 1: read() — ler tudo de uma vez
with open("teste.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
# Método 2: readlines() — ler como lista
with open("teste.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print(lines) # ['Primeira linha\n', 'Segunda linha\n', 'Terceira linha\n']
# Método 3: linha por linha (recomendado)
with open("teste.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip()) # strip() remove caracteres de nova linha
▶ Exemplo: Ferramenta de Backup de Arquivo (Dificuldade ⭐⭐)
▶ ExperimenteSaída:
# Function defined successfully
5. Lendo e Escrevendo Arquivos CSV
CSV (Valores Separados por Vírgula) é o formato de intercâmbio de dados mais comum. Python tem um módulo csv embutido:
▶ Exemplo: E/S de Arquivo CSV
import csv
# Escrever CSV
data = [
["Nome", "Idade", "Cidade"],
["João Silva", 25, "São Paulo"],
["Maria Souza", 30, "Rio de Janeiro"],
["Pedro Santos", 22, "Belo Horizonte"],
]
with open("alunos.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerows(data)
# Ler CSV
with open("alunos.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row)
Saída:
['Nome', 'Idade', 'Cidade']
['João Silva', '25', 'São Paulo']
['Maria Souza', '30', 'Rio de Janeiro']
['Pedro Santos', '22', 'Belo Horizonte']
(1) Usando DictReader/DictWriter (Mais Intuitivo)
▶ Exemplo: DictReader/DictWriter para CSV
import csv
# Escrever
data = [
{"name": "João Silva", "age": 25, "city": "São Paulo"},
{"name": "Maria Souza", "age": 30, "city": "Rio de Janeiro"},
]
with open("alunos_dict.csv", "w", newline="", encoding="utf-8") as f:
fieldnames = ["name", "age", "city"]
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader() # Escrever cabeçalho
writer.writerows(data) # Escrever linhas de dados
# Ler
with open("alunos_dict.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(f"{row['name']} — {row['age']} anos, de {row['city']}")
6. Manipulação de Caminhos
Use os.path ou pathlib para manipulação de caminhos de arquivo — mais seguro que concatenação de strings:
▶ Exemplo: Manipulação de Caminhos com os.path
import os
# Obter diretório atual
print(os.getcwd()) # /projeto
# Juntar caminhos (lida automaticamente com separadores)
path = os.path.join("data", "files", "teste.txt")
print(path) # data/files/teste.txt
# Verificar se caminho existe
print(os.path.exists("teste.txt")) # True/False
print(os.path.isfile("teste.txt")) # É um arquivo?
print(os.path.isdir("data")) # É um diretório?
# Obter informações do arquivo
print(os.path.getsize("teste.txt")) # Tamanho do arquivo em bytes
# Listar conteúdo do diretório
for f in os.listdir("."):
print(f)
(1) Recomendado: pathlib (Python 3.4+)
▶ Exemplo: Operações de Caminho com pathlib
▶ ExperimenteSaída:
# Executed successfully
pathlib é a forma recomendada de lidar com caminhos em Python 3.4+. É mais orientada a objetos e intuitiva que os.path. Para novos projetos, use pathlib.
7. Casos de Uso Comuns
- Persistência de dados: Salve dados do programa em arquivos, restaure na próxima inicialização.
- Registro de log: Adicione informações de execução do programa a arquivos de log.
- Gerenciamento de configuração: Leia arquivos de configuração (
.ini,.json,.env). - Importação/exportação de dados: Troque dados com Excel/bancos de dados usando formato CSV.
- Processamento em lote de arquivos: Atravesse diretórios, modifique conteúdo de arquivos ou renomeie arquivos em lote.
❓ Perguntas Frequentes
encoding="utf-8"?cp1252, macOS/Linux usa utf-8. Sem especificar, processar arquivos de texto em português no Windows pode resultar em saída ilegível. Crie o hábito de especificar a codificação para tranquilidade multiplataforma."w" limpa o conteúdo existente do arquivo. Como evitar sobrescritas acidentais?"x" (criação exclusiva) — se o arquivo já existir, levanta um erro em vez de limpá-lo. Ou use os.path.exists() para verificar primeiro. Dados são preciosos — pense duas vezes antes de escrever em um arquivo.read() ou readlines() — eles carregam o arquivo inteiro na memória. Use for line in file: para ler linha por linha, processando apenas uma linha de cada vez com uso mínimo de memória. Alternativamente, use read(1024) para ler um número específico de bytes por vez.📖 Resumo
- Operações de arquivo em três etapas:
open()-> ler/escrever ->close() - A declaração
withgerencia o fechamento do arquivo automaticamente — a abordagem mais segura - Modos:
"r"leitura,"w"escrita,"a"adicionar - Métodos de leitura:
read()conteúdo completo,readlines()como lista,for line in flinha por linha - Módulo
csvpara E/S de arquivos CSV; suportaDictReader/DictWriter os.pathepathlibpara manipulação de caminhos de arquivo;pathlibé mais moderno- Sempre especifique
encoding="utf-8"para operações com arquivos de texto em português
📝 Exercícios
-
Iniciante (Dificuldade ⭐): Escreva um programa que aceite o nome e a idade de um usuário e os salve em um arquivo
usuarios.txt(um usuário por linha, formato:nome,idade). Adicione novos registros a cada execução sem sobrescrever dados existentes. -
Intermediário (Dificuldade ⭐⭐): Escreva um programa que leia o arquivo
usuarios.txtdo exercício anterior, analise cada linha, calcule e exiba a idade média dos usuários. Dica: Usesplit(",")para analisar,int()para converter idade. -
Avançado (Dificuldade ⭐⭐⭐): Escreva um programa "bloco de notas simples." Recursos:
add:título|conteúdopara adicionar uma nota (adicione anotas.csv),listpara listar todas as notas,search:palavra-chavepara buscar notas. Armazene em formato CSV (campos: título, conteúdo, data de criação). Dica: Usedatetime.now()para o timestamp atual.