Programador Leigo
python 7 min leitura 2025-06-25

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

  1. Sempre use with para abrir arquivos
  2. Especifique encoding quando trabalhar com texto: open("f.txt", encoding="utf-8")
  3. Use pathlib em vez de os.path — é mais legível
  4. Cuidado com "w" — ele apaga tudo. Use "a" para adicionar
  5. 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.

Continue lendo

Compartilhar