Manipulação de Arquivos em Python: Guia Completo
Ler, escrever, copiar e organizar arquivos com Python. Um guia prático para quem está começando.
Por que aprender a manipular arquivos?
Cedo ou tarde, todo programa precisa ler ou gravar dados em arquivos. Logs, configurações, exportar relatórios, processar CSVs — tudo passa por manipulação de arquivos. Vamos dominar isso.
Lendo arquivos
O básico com open()
arquivo = open("dados.txt", "r") # "r" = leitura (read)
conteudo = arquivo.read()
print(conteudo)
arquivo.close() # importante: sempre fechar!
O jeito certo: with
O with garante que o arquivo será fechado automaticamente, mesmo se der erro:
with open("dados.txt", "r") as arquivo:
conteudo = arquivo.read()
print(conteudo)
# aqui o arquivo já está fechado
Sempre use with. Esquecer de fechar arquivo é uma das causas mais comuns de bugs em produção.
Modos de abertura
| Modo | Descrição |
|---|---|
"r" |
Leitura (padrão). Erro se não existir |
"w" |
Escrita. Cria ou sobrescreve |
"a" |
Append. Adiciona ao final |
"x" |
Criação exclusiva. Erro se já existir |
"rb" |
Leitura binária (imagens, PDFs) |
"wb" |
Escrita binária |
Formas de ler
with open("dados.txt") as f:
# Ler tudo de uma vez
tudo = f.read()
# Ler uma linha
linha = f.readline()
# Ler todas as linhas como lista
linhas = f.readlines()
Ler linha por linha (melhor para arquivos grandes)
with open("log.txt") as f:
for linha in f:
print(linha.strip()) # strip() remove o \n
Isso não carrega o arquivo inteiro na memória — processa uma linha por vez.
Escrevendo arquivos
Criar ou sobrescrever
with open("saida.txt", "w") as f:
f.write("Primeira linha\n")
f.write("Segunda linha\n")
Cuidado: "w" apaga o conteúdo anterior!
Adicionar ao final
with open("log.txt", "a") as f:
f.write("Nova entrada no log\n")
Escrever várias linhas
linhas = ["Linha 1\n", "Linha 2\n", "Linha 3\n"]
with open("saida.txt", "w") as f:
f.writelines(linhas)
Trabalhando com caminhos: pathlib
O módulo pathlib é a forma moderna de lidar com caminhos:
from pathlib import Path
# Criar caminho
pasta = Path("projetos/app")
# Verificar existência
print(pasta.exists()) # True/False
print(pasta.is_file()) # é arquivo?
print(pasta.is_dir()) # é diretório?
# Criar diretórios
Path("nova_pasta/sub_pasta").mkdir(parents=True, exist_ok=True)
# Ler e escrever direto
Path("notas.txt").write_text("Olá!")
texto = Path("notas.txt").read_text()
Listar arquivos de um diretório
from pathlib import Path
# Todos os arquivos da pasta atual
for item in Path(".").iterdir():
print(item)
# Só arquivos .py
for py in Path(".").glob("*.py"):
print(py)
# Busca recursiva (subpastas)
for py in Path(".").glob("**/*.py"):
print(py)
Trabalhando com CSV
Python tem um módulo csv embutido:
import csv
# Escrever CSV
with open("alunos.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["nome", "nota", "turma"])
writer.writerow(["Ana", 9.5, "A"])
writer.writerow(["Pedro", 7.0, "B"])
writer.writerow(["Maria", 8.5, "A"])
# Ler CSV
with open("alunos.csv") as f:
reader = csv.DictReader(f)
for aluno in reader:
print(f"{aluno['nome']} tirou {aluno['nota']}")
Trabalhando com JSON
import json
# Escrever JSON
dados = {
"nome": "Ana",
"idade": 25,
"linguagens": ["Python", "JavaScript"]
}
with open("perfil.json", "w") as f:
json.dump(dados, f, indent=2, ensure_ascii=False)
# Ler JSON
with open("perfil.json") as f:
perfil = json.load(f)
print(perfil["nome"]) # Ana
O ensure_ascii=False é importante para manter acentos em português.
Copiar, mover e deletar
import shutil
from pathlib import Path
# Copiar arquivo
shutil.copy("original.txt", "copia.txt")
# Copiar pasta inteira
shutil.copytree("pasta_origem", "pasta_destino")
# Mover/renomear
Path("antigo.txt").rename("novo.txt")
shutil.move("arquivo.txt", "outra_pasta/arquivo.txt")
# Deletar arquivo
Path("temporario.txt").unlink()
# Deletar pasta (vazia)
Path("pasta_vazia").rmdir()
# Deletar pasta com conteúdo
shutil.rmtree("pasta_com_coisas")
Exemplo prático: organizador de arquivos
Um script que organiza arquivos por extensão:
from pathlib import Path
pasta = Path("Downloads")
extensoes = {
"Imagens": [".jpg", ".png", ".gif", ".svg"],
"Documentos": [".pdf", ".doc", ".docx", ".txt"],
"Planilhas": [".xls", ".xlsx", ".csv"],
"Código": [".py", ".js", ".html", ".css"],
}
for arquivo in pasta.iterdir():
if arquivo.is_file():
for categoria, exts in extensoes.items():
if arquivo.suffix.lower() in exts:
destino = pasta / categoria
destino.mkdir(exist_ok=True)
arquivo.rename(destino / arquivo.name)
print(f"{arquivo.name} → {categoria}/")
break
Dicas importantes
- Sempre use
withpara abrir arquivos - Especifique encoding quando trabalhar com texto:
open("f.txt", encoding="utf-8") - Use
pathlibem vez deos.path— é mais legível - Cuidado com
"w"— ele apaga tudo. Use"a"para adicionar - Para arquivos grandes, leia linha por linha em vez de carregar tudo na memória
Manipular arquivos é uma das habilidades mais práticas que você pode ter. Com o que aprendeu aqui, você já consegue automatizar muita coisa no dia a dia.