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.


Itens relacionados:readlines() close() open() read() int() list with

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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Executed successfully
⚠️ Atenção: Sempre lembre de 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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Executed successfully
💡 Sempre use 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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Primeira linha
Segunda linha
Terceira linha


4. Formas de Ler Arquivos

▶ Exemplo: Três Formas de Ler um Arquivo

TEXT 📖 Somente leitura
# 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 ⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# 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

TEXT 📖 Somente leitura
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:

TEXT 📖 Somente leitura
['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

TEXT 📖 Somente leitura
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

TEXT 📖 Somente leitura
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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# 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


Itens relacionados:readlines() close() open() read() int() list with

❓ Perguntas Frequentes

P Preciso sempre escrever encoding="utf-8"?
R Em ambientes de língua portuguesa, é fortemente recomendado toda vez. A codificação padrão do Python varia por sistema operacional — Windows usa 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.
P O modo "w" limpa o conteúdo existente do arquivo. Como evitar sobrescritas acidentais?
R Use o modo "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.
P Como ler arquivos muito grandes (centenas de MB)?
R Não use 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



📝 Exercícios

  1. 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.

  2. Intermediário (Dificuldade ⭐⭐): Escreva um programa que leia o arquivo usuarios.txt do exercício anterior, analise cada linha, calcule e exiba a idade média dos usuários. Dica: Use split(",") para analisar, int() para converter idade.

  3. Avançado (Dificuldade ⭐⭐⭐): Escreva um programa "bloco de notas simples." Recursos: add:título|conteúdo para adicionar uma nota (adicione a notas.csv), list para listar todas as notas, search:palavra-chave para buscar notas. Armazene em formato CSV (campos: título, conteúdo, data de criação). Dica: Use datetime.now() para o timestamp atual.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%