Manipulação de Arquivos Python — 2025 | Python Brasil

Domine a manipulação de arquivos em Python: leitura, escrita, CSV e JSON com exemplos práticos. Aprenda agora!

5 min de leitura Equipe Python Brasil

Trabalhar com arquivos é uma das habilidades mais importantes que um programador Python pode desenvolver. Seja para ler configurações, processar dados em lote, gerar relatórios ou fazer integração entre sistemas, a manipulação de arquivos está presente em praticamente todo projeto real.

Neste artigo, vamos explorar desde a abertura e leitura de arquivos de texto simples até o processamento de formatos estruturados como CSV e JSON, que são extremamente comuns no mercado de trabalho.

Abrindo e lendo arquivos de texto

A função embutida open() é o ponto de partida para qualquer operação com arquivos. O Python oferece diferentes modos de abertura, sendo os mais comuns r (leitura), w (escrita) e a (adição).

# Leitura básica de um arquivo
with open("dados.txt", "r", encoding="utf-8") as arquivo:
    conteudo = arquivo.read()
    print(conteudo)

O uso do with (gerenciador de contexto) garante que o arquivo será fechado automaticamente ao final do bloco, mesmo que ocorra um erro durante a execução. Essa é a forma recomendada e deve sempre ser preferida em relação ao open() e close() manuais.

Lendo linha por linha

Quando o arquivo é muito grande, carregar tudo na memória de uma vez pode ser problemático. Nesses casos, leia linha por linha:

with open("log_grande.txt", "r", encoding="utf-8") as arquivo:
    for numero, linha in enumerate(arquivo, 1):
        linha = linha.strip()
        if linha:
            print(f"Linha {numero}: {linha}")

Você também pode usar readlines() para obter uma lista de todas as linhas, mas para arquivos grandes, o iterador direto sobre o arquivo é mais eficiente em termos de memória.

Escrevendo em arquivos

A escrita funciona de forma similar. O modo w cria um arquivo novo ou sobrescreve o existente, enquanto a adiciona conteúdo ao final.

# Escrevendo um novo arquivo
registros = [
    "João Silva - Aprovado",
    "Maria Santos - Aprovada",
    "Pedro Oliveira - Reprovado",
    "Ana Costa - Aprovada"
]

with open("resultados.txt", "w", encoding="utf-8") as arquivo:
    for registro in registros:
        arquivo.write(registro + "\n")

# Adicionando ao final do arquivo
with open("resultados.txt", "a", encoding="utf-8") as arquivo:
    arquivo.write("Lucas Ferreira - Aprovado\n")

Uma prática muito comum é usar writelines() para escrever múltiplas linhas de uma vez. Porém, lembre-se de que esse método não adiciona quebras de linha automaticamente — você precisa incluí-las manualmente.

Trabalhando com CSV

O formato CSV (Comma-Separated Values) é um dos mais usados para troca de dados entre sistemas. Python possui o módulo csv na biblioteca padrão, o que significa que não é necessário instalar nada adicional.

import csv

# Escrevendo um arquivo CSV
funcionarios = [
    ["Nome", "Cargo", "Salário"],
    ["Ana Paula", "Desenvolvedora", "8500"],
    ["Bruno Costa", "Analista de Dados", "7200"],
    ["Carla Dias", "DevOps", "9100"],
    ["Daniel Lima", "Tech Lead", "12000"]
]

with open("funcionarios.csv", "w", newline="", encoding="utf-8") as arquivo:
    escritor = csv.writer(arquivo)
    escritor.writerows(funcionarios)
    print("Arquivo CSV criado com sucesso.")

Lendo CSV como dicionário

O DictReader é especialmente útil porque permite acessar cada coluna pelo nome do cabeçalho:

import csv

with open("funcionarios.csv", "r", encoding="utf-8") as arquivo:
    leitor = csv.DictReader(arquivo)
    total_salarios = 0
    for linha in leitor:
        nome = linha["Nome"]
        salario = float(linha["Salário"])
        total_salarios += salario
        print(f"{nome}: R$ {salario:,.2f}")

    print(f"\nTotal em salários: R$ {total_salarios:,.2f}")

O DictReader usa automaticamente a primeira linha como cabeçalho, retornando cada linha como um dicionário. Isso torna o código muito mais legível do que acessar colunas por índice numérico.

Trabalhando com JSON

JSON (JavaScript Object Notation) é o formato padrão para APIs e configurações modernas. O módulo json do Python converte facilmente entre dicionários Python e strings JSON.

import json

# Criando e salvando dados em JSON
configuracao = {
    "aplicacao": "MeuApp",
    "versao": "2.1.0",
    "banco_de_dados": {
        "host": "localhost",
        "porta": 5432,
        "nome": "meuapp_db"
    },
    "debug": False,
    "idiomas_suportados": ["pt-br", "en", "es"]
}

with open("config.json", "w", encoding="utf-8") as arquivo:
    json.dump(configuracao, arquivo, indent=4, ensure_ascii=False)
    print("Configuração salva.")

Lendo e processando JSON

import json

with open("config.json", "r", encoding="utf-8") as arquivo:
    config = json.load(arquivo)

print(f"Aplicação: {config['aplicacao']}")
print(f"Versão: {config['versao']}")
print(f"Banco de dados: {config['banco_de_dados']['host']}")
print(f"Modo debug: {config['debug']}")

# Modificando e salvando novamente
config["versao"] = "2.2.0"
config["debug"] = True

with open("config.json", "w", encoding="utf-8") as arquivo:
    json.dump(config, arquivo, indent=4, ensure_ascii=False)

O parâmetro ensure_ascii=False é essencial para trabalhar com caracteres acentuados em português. Sem ele, acentos e cedilhas seriam convertidos em sequências de escape Unicode.

Trabalhando com caminhos de forma segura

O módulo pathlib oferece uma maneira moderna e multiplataforma de lidar com caminhos de arquivos:

from pathlib import Path

# Criando caminhos de forma segura
pasta_dados = Path("dados")
pasta_dados.mkdir(exist_ok=True)

arquivo_saida = pasta_dados / "relatorio.txt"

# Verificando existência
if arquivo_saida.exists():
    print(f"Tamanho: {arquivo_saida.stat().st_size} bytes")
else:
    arquivo_saida.write_text("Relatório gerado com sucesso.", encoding="utf-8")
    print("Arquivo criado.")

# Listando arquivos de uma pasta
for arquivo in pasta_dados.glob("*.txt"):
    print(f"Encontrado: {arquivo.name}")

O pathlib é preferível ao os.path em código moderno porque oferece uma API orientada a objetos, mais intuitiva e fácil de encadear.

Boas práticas na manipulação de arquivos

Ao trabalhar com arquivos em projetos reais, algumas práticas são fundamentais:

  • Sempre use with: o gerenciador de contexto garante o fechamento adequado do arquivo, mesmo em caso de exceções.
  • Especifique o encoding: use encoding="utf-8" para evitar problemas com caracteres acentuados. Isso é especialmente importante em sistemas Windows.
  • Trate exceções: use try/except para lidar com arquivos que podem não existir ou permissões insuficientes.
  • Use pathlib: prefira pathlib.Path em vez de concatenar strings para montar caminhos de arquivo.
  • Valide dados de entrada: ao ler CSV ou JSON, sempre verifique se os dados estão no formato esperado antes de processá-los.
from pathlib import Path

def ler_arquivo_seguro(caminho):
    """Lê um arquivo com tratamento de erros adequado."""
    arquivo = Path(caminho)
    try:
        return arquivo.read_text(encoding="utf-8")
    except FileNotFoundError:
        print(f"Arquivo não encontrado: {caminho}")
        return None
    except PermissionError:
        print(f"Sem permissão para ler: {caminho}")
        return None

Conclusão

A manipulação de arquivos em Python é poderosa e versátil. Com os módulos csv, json e pathlib da biblioteca padrão, você consegue lidar com a maioria dos cenários do dia a dia sem instalar dependências externas. Dominar essas ferramentas é um passo essencial para qualquer programador Python.

Como próximos passos, explore a biblioteca openpyxl para trabalhar com planilhas Excel, o módulo sqlite3 para bancos de dados locais e o pandas para análise de dados em grande escala. Cada um deles complementa as habilidades que você aprendeu aqui.

E

Equipe Python Brasil

Contribuidor do Python Brasil — Aprenda Python em Português