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).
# 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/exceptpara lidar com arquivos que podem não existir ou permissões insuficientes. - Use
pathlib: prefirapathlib.Pathem 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.
Equipe Python Brasil
Contribuidor do Python Brasil — Aprenda Python em Português