Curso
Em algum momento, todo programa Python precisa salvar alguma coisa: registros, resultados, entradas do usuário, arquivos de configuração ou dados processados. Você pode estar exportando resultados de análises, registrando o que seu script fez ou mantendo o estado do aplicativo entre execuções. Seja como for, escrever em arquivos é uma habilidade essencial do Python que você vai usar várias vezes.
Neste guia, você vai aprender a escrever em arquivos no Python usando a biblioteca padrão. Vamos começar com o básico e, em seguida, passar pelos modos de arquivo, codificações, formatos estruturados como JSON e CSV e padrões prontos para produção que tornam seu código mais seguro e previsível. No final, você vai conseguir escrever arquivos com confiança em aplicações reais, não só em exemplos simples.
Se você já está familiarizado com os conceitos básicos do Python, este tutorial ajuda a preencher a lacuna entre scripts e o manuseio de arquivos de nível profissional. Se você quiser reforçar os fundamentos enquanto aprende Python, nossos cursos Introdução a Python Intermediário combinam bem com este passo a passo.
Aprenda Python do zero
Começando: Sua primeira gravação de arquivo em Python
A maneira mais rápida de entender como escrever arquivos em Python é simplesmente fazer isso. Vamos começar com o exemplo mais simples possível e partir daí.
O padrão básico (passo a passo)
Basicamente, escrever em um arquivo segue um padrão simples:
- Abrir um arquivo
- Escreva conteúdo nele
- Feche o arquivo
Python tem uma função embutida chamada ` open() ` para cuidar da primeira etapa.
A função open(), explicada de forma simples
A função ` open() ` conecta seu código Python a um arquivo no disco. Você diz duas coisas:
- Qual arquivo você quer usar?
- Como você quer trabalhar com isso
Para escrever, o modo mais comum é o "w", que significa escrever. Se o arquivo não existir, o Python vai criá-lo. Se existir, o Python vai sobrescrevê-lo.
file = open("example.txt", "w")
file.write("Hello, world!")
file.close()
Execute este script e Python vai criar um arquivo chamado example.txt no mesmo diretório do seu código.
Então, o que acabou de acontecer?
-
open("example.txt", "w")abre ou cria o arquivo -
write()envia texto para o arquivo -
close()limpa os dados e libera o arquivo
Isso funciona, mas não é assim que você deve gravar arquivos a longo prazo.
A maneira certa em Python: Usando gerenciadores de contexto
Abrir e fechar arquivos manualmente é fácil de esquecer e fácil de errar. É por isso que o Python incentiva o uso de gerenciadores de contexto.
Eis porque é que usar with é melhor: Usar with garante que o arquivo seja sempre fechado corretamente, mesmo que algo dê errado durante a gravação. Isso deixa seu código mais seguro e fácil de ler.
with open("example.txt", "w") as file:
file.write("Hello, world!")
Quando o bloco ` with ` termina, Python fecha automaticamente o arquivo. Esse padrão aparece em todo lugar no código Python profissional e vale a pena memorizar. Você vai ver isso várias vezes em nosso programa de programação em Python e em nosso curso de como escrever código Python limpo.
Um exemplo de gravação em arquivo em Python
Vamos aplicar isso a algo um pouco mais realista. Aqui vou criar uma entrada no diário.
from datetime import date
today = date.today().isoformat()
with open("journal.txt", "a", encoding="utf-8") as file:
file.write(f"{today}: Practiced writing files in Python.\n")
Isso traz duas ideias importantes:
-
Modo de acréscimo (
"a") -
Escrevendo entradas estruturadas e repetíveis
-
Cada execução adiciona uma nova linha sem apagar as entradas anteriores.
Entendendo os modos de arquivo: Quando usar w, a, x e r+
Depois de aprender a gravar em um arquivo, a decisão mais importante é como abri-lo. Os modos de arquivo controlam se os dados são sobrescritos, preservados ou protegidos.
Modo de escrita (w): Começando do zero
O modo de escrita cria um arquivo se ele não existir. Ele também o substitui, se for o caso.
with open("report.txt", "w") as file:
file.write("Daily sales report\n")
Use isso quando quiser começar do zero. Cuidado, porque esse modo apaga os dados existentes sem avisar.
Modo de acréscimo (a): Adicionar sem perder dados
O modo de acrescentar adiciona conteúdo ao final de um arquivo.
with open("activity.log", "a") as file:
file.write("User logged in\n")
Isso é ideal para registros e registros incrementais e é um dos modos mais seguros para sistemas de produção.
Modo exclusivo (x): Criação segura de arquivos
O modo exclusivo só cria um arquivo se ele ainda não existir.
try:
with open("config.txt", "x") as file:
file.write("initialized=true")
except FileExistsError:
print("File already exists.")
Isso é útil para scripts de configuração em que sobrescrever seria arriscado.
Modo de leitura-gravação (r+): Modificando arquivos existentes
Esse modo permite ler e escrever, mas precisa que o arquivo já exista.
with open("notes.txt", "r+") as file:
content = file.read()
file.write("\nNew note added.")
A escrita rola na posição atual do ponteiro do arquivo, por isso é importante entender como o cursor se move.
Então, qual modo você deve usar? Aqui está o meu guia mental:
-
Substituir os dados existentes →
w -
Manter dados e adicionar mais →
a -
Evite sobrescrever →
x -
Ler e atualizar o mesmo arquivo →
r+
Para reforçar visualmente esse processo de decisão:

Escolher o modo de arquivo certo geralmente depende da intenção: sobrescrever, acrescentar, proteger ou modificar.
Escrevendo diferentes tipos de conteúdo em Python
Depois que você se sentir à vontade para abrir arquivos com o modo certo, a próxima pergunta é o que você realmente está escrevendo.
Nos programas reais, você nem sempre está escrevendo uma única string. Você pode estar salvando listas, exportando resultados ou trabalhando com dados que não são texto, como imagens ou PDFs. Nesta seção, você vai aprender a gravar diferentes tipos de conteúdo em arquivos de forma segura e eficiente.
Escrevendo texto e strings
O caso mais simples é escrever texto simples. O Python oferece dois métodos principais para isso: write() e writelines().
write() escreve exatamente o que você passa, sem novas linhas automáticas.
with open("example.txt", "w") as file:
file.write("First line\n")
file.write("Second line\n")
write() vs. writelines()
A principal diferença é simples: ` write() ` escreve uma string de cada vez, enquanto ` writelines() ` escreve uma sequência de strings como estão; ` writelines() ` não adiciona novas linhas para você, então cada elemento já precisa terminar com ` \n`.
Na prática, muitos desenvolvedores ainda preferem usar write() em um loop porque é mais fácil de ler.
lines = ["One\n", "Two\n", "Three\n"]
with open("example.txt", "w") as file:
file.writelines(lines)
Escrevendo listas de forma eficiente
items = ["apple", "banana", "cherry"]
content = "\n".join(items)
with open("fruits.txt", "w") as file:
file.write(content)
A junção reduz as gravações repetidas no disco, o que é importante para conjuntos de dados maiores.
Escrevendo dados binários
O modo binário ("wb") é necessário para arquivos que não são de texto.
binary_data = b"\x89PNG\r\n\x1a\n"
with open("image.bin", "wb") as file:
file.write(binary_data)
Trabalhando com codificações em Python (por que seu texto parece corrompido)
Problemas de codificação são um dos erros mais comuns — e frustrantes — no manuseio de arquivos.
Sempre especifique UTF-8
A codificação explícita evita problemas entre plataformas e caracteres corrompidos, como você pode ver aqui:
with open("example.txt", "w", encoding="utf-8") as file:
file.write("Café, résumé, naïve")
Exemplo real: Texto multilíngue
Ser bem claro aqui evita um monte de trabalho de depuração depois. É isso que eu quero dizer:
customers = ["Ana García", "François Dupont", "Miyuki 山田"]
with open("customers.txt", "w", encoding="utf-8") as file:
for name in customers:
file.write(name + "\n")
Técnicas avançadas de programação em Python
Quando você já estiver confortável escrevendo arquivos em Python, o próximo desafio geralmente não é como escrever, mas como fazer isso de forma segura e eficiente. Arquivos grandes, travamentos inesperados e gargalos de desempenho são casos extremos que ainda não abordamos.
Como lidar com arquivos grandes usando gravações fragmentadas
A saída de streaming mantém o uso de memória baixo:
def generate_lines():
for i in range(1_000_000):
yield f"Line {i}\n"
with open("large.txt", "w", encoding="utf-8") as file:
for line in generate_lines():
file.write(line)
Atomic escreve: Prevenção da corrupção
A ideia aqui é evitar gravações parciais se um programa travar no meio da atualização.
import os, tempfile
def atomic_write(path, content):
with tempfile.NamedTemporaryFile("w", delete=False) as tmp:
tmp.write(content)
os.replace(tmp.name, path)
Além dos arquivos de texto: Escrevendo JSON e CSV
Quando seus dados têm uma estrutura, o texto simples deixa de ser a melhor opção. Python facilita escrever formatos estruturados comuns, como JSON e CSV, para que você possa armazenar dados de uma maneira mais fácil de compartilhar, inspecionar e processar posteriormente.
Escrevendo JSON
Quando você está trabalhando com dicionários ou dados aninhados, JSON geralmente é o formato mais natural para gravar. O módulojson integrado do Python cuida da conversão pra você, então não precisa formatar as strings manualmente.
import json
data = {"id": 1, "name": "Jeremiah"}
with open("user.json", "w", encoding="utf-8") as file:
json.dump(data, file, indent=2)
Escrevendo CSV
Se seus dados estiverem em formato tabular e provavelmente forem abertos em planilhas ou ferramentas de BI, o CSV é a melhor opção. O módulo csv ajuda você a escrever linhas com segurança, sem se preocupar com delimitadores ou aspas.
import csv
rows = [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
with open("users.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=["id", "name"])
writer.writeheader()
writer.writerows(rows)
Erros comuns ao escrever em arquivos em Python
Mesmo que escrever arquivos em Python seja bem simples, alguns pequenos erros costumam causar a maioria dos problemas na vida real. Esses problemas geralmente não têm a ver com sintaxe; eles vêm de detalhes que a gente não percebe, como gerenciamento de recursos, modos de arquivo ou escolhas de desempenho.
Lembre-se dos seguintes pontos.
-
Esquecer de fechar arquivos → usar
‘with’ -
Sobrescrever dados sem querer → modos de verificação dupla
-
Ignorando codificação → sempre especifique UTF-8
-
Escrever arquivos grandes de forma ineficiente → saída em lote ou fluxo
A maioria dos erros aqui vem de pequenos descuidos, não de lógica complexa.
Conclusão
Escrever em arquivos no Python começa de forma simples, mas os programas do mundo real exigem mais cuidado. Neste guia, você passou da sua primeira gravação de arquivo para escolher modos de arquivo seguros, lidar com codificações corretamente, exportar dados estruturados e aplicar padrões prontos para produção.
O ponto principal é a intenção: escolha o modo certo, seja claro sobre a codificação e escreva com cuidado quando os dados forem importantes.
Torne-se um desenvolvedor Python
Escritor técnico especializado em IA, ML e ciência de dados, tornando ideias complexas claras e acessíveis.
Perguntas frequentes
O Python consegue gravar arquivos de forma assíncrona?
Sim, com bibliotecas como aiofiles, embora a maioria dos scripts não precise disso.
Qual é o modo de gravação mais seguro?
Anexar ("a") ou exclusivo ("x"), dependendo da intenção.
Por que meu texto tá todo errado?
Incompatibilidade de codificação — use sempre UTF-8.
Onde meu arquivo está sendo salvo?
Em relação ao diretório de trabalho do script.
Devo usar o pathlib?
Sim, para um tratamento mais limpo e multiplataforma dos caminhos.

