---
title: "Manipulação de Arquivos Python — 2025 | Python Brasil"
url: "https://python.dev.br/blog/manipulacao-de-arquivos-python/"
markdown_url: "https://python.dev.br/blog/manipulacao-de-arquivos-python.MD"
description: "Domine a manipulação de arquivos em Python: leitura, escrita, CSV e JSON com exemplos práticos. Aprenda agora!"
date: "2025-07-08"
author: "Equipe Python Brasil"
---

# 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!


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

```python
# 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:

```python
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.

```python
# 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.

```python
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:

```python
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.

```python
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

```python
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:

```python
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.

```python
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.

Para processamento de arquivos massivos onde performance é crítica, considere <a href="https://rustlang.com.br/" target="_blank" rel="noopener" onclick="umami.track('portfolio-site-click', { destination: 'rustlang.com.br' })">Rust</a>, que oferece I/O de altíssima performance com segurança de memória garantida.
