✅ Artigo atualizado em Setembro 2026 Todos os exemplos agora usam
with open(..., encoding="utf-8"), que fecha o arquivo sozinho e evita problemas de acentuação. Mantivemos um exemplo comclose()manual só como comparação. Novas seções: tabela de modos de abertura, como criar um arquivo, como ler CSV (inclusive no Google Colab), erros comuns com traceback e 8 exercícios resolvidos. Exemplos testados no Python 3.10 e 3.13.
Resposta rápida
Para manipular arquivos em Python, use open(nome, modo, encoding="utf-8") dentro de um bloco with, que fecha o arquivo sozinho. O modo "r" lê, "w" cria ou sobrescreve e "a" acrescenta no final. Leia com read() ou com um for e escreva com write().
1
2
3
4
5
with open('notas.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('Olá, arquivo!\n') # cria (ou sobrescreve) o arquivo
with open('notas.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read()) # Olá, arquivo!
Resumo em 30 segundos:
-
"r"(padrão) só lê e dáFileNotFoundErrorse o arquivo não existir. -
"w"cria o arquivo, mas apaga todo o conteúdo se ele já existir. Para não apagar, use"a". -
"x"só cria arquivo novo e dáFileExistsErrorse ele já existir. Acrescenteb("rb","wb") para imagens e PDFs. - Sempre passe
encoding="utf-8"em arquivos de texto: sem ele, o Windows costuma usarcp1252e os acentos quebram. -
withgarante oclose()mesmo com erro. Fora do bloco, usar o arquivo dáValueError: I/O operation on closed file.
Salve salve Pythonista 👋
Um dos recursos mais importantes em qualquer linguagem de programação é a capacidade de trabalhar com arquivos.
Em Python, o processo de abrir, ler e escrever em arquivos é bastante simples e intuitivo.
Neste artigo, vamos explorar como realizar essas operações de forma eficiente e eficaz em Python.
Vá Direto ao Assunto…
- Por que abrir arquivos em Python?
- Abrindo um arquivo em Python
- Qual modo de abertura usar: r, w, a ou x?
- Lendo um arquivo em Python
- Escrevendo em um arquivo em Python
- Como criar um arquivo em Python
- Manipulando arquivos com o statement
with - Como ler um arquivo CSV em Python (e no Google Colab)
- Erros comuns
- Exercícios resolvidos
Por que abrir arquivos em Python?
A capacidade de abrir e manipular arquivos é essencial para muitos projetos de programação.
Os arquivos podem conter uma variedade de informações, como texto, dados estruturados (como CSV e JSON), imagens, entre outros.
Ao abrir e ler esses arquivos, podemos realizar diversas tarefas, como extrair informações, processar dados e até mesmo criar novos arquivos.
Além disso, ao escrever em arquivos, podemos armazenar dados de saída, resultados de cálculos e até mesmo criar registros para fins de auditoria.
Portanto, é fundamental saber como abrir, ler e escrever arquivos em Python para realizar projetos práticos e úteis.
Abrindo um arquivo em Python
O primeiro passo para trabalhar com um arquivo em Python é abrí-lo.
Para isso, utilizamos a função open(), que recebe o nome do arquivo, o modo de abertura e, para arquivos de texto, o encoding (a codificação dos caracteres).
Vejamos um exemplo:
1
2
3
4
with open('texto.txt', 'r', encoding='utf-8') as arquivo:
... # trabalhe com o arquivo aqui dentro
# aqui fora do bloco, o arquivo já foi fechado automaticamente
Neste exemplo, estamos abrindo o arquivo chamado “texto.txt” em modo de leitura ('r'), com codificação UTF-8, e dando o nome arquivo ao objeto retornado.
O with garante que o arquivo seja fechado ao final do bloco - veremos os detalhes na seção sobre o statement with. Por isso, todos os exemplos deste artigo usam essa forma.
Existem diferentes modos de abertura de arquivos que podem ser usados:
-
'r': modo de leitura (padrão), o arquivo deve existir previamente -
'w': modo de escrita, se o arquivo não existir, ele será criado; se existir, o conteúdo anterior é apagado -
'a': modo de anexar, adiciona informações ao final do arquivo (e cria o arquivo se ele não existir) -
'x': modo exclusivo, cria um novo arquivo somente se ele não existir -
'b': modo binário, usado para arquivos binários, como imagens ou vídeos -
't': modo de texto, usado para arquivos de texto
Podemos usar combinações desses modos.
Por exemplo, para abrir um arquivo para leitura e escrita, podemos utilizar 'r+', e para abrir um arquivo em modo binário de leitura, podemos usar 'rb'.
Por que passar encoding="utf-8"?
Quando você não informa o encoding, o Python usa a codificação padrão do sistema operacional (a documentação do open() diz que ela é “platform-dependent”, obtida com locale.getencoding()).
No Linux e no macOS ela costuma ser UTF-8, mas no Windows em português ela costuma ser cp1252. Resultado: o mesmo código funciona na sua máquina e quebra na do colega - ou grava os acentos de um jeito e lê de outro.
Veja o que acontece quando um texto gravado em UTF-8 é lido com cp1252:
1
2
3
4
5
with open('novo_texto.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('Olá, Mundo!')
with open('novo_texto.txt', 'r', encoding='cp1252') as arquivo:
print(arquivo.read())
A saída sai com os acentos “quebrados”:
1
Olá, Mundo!
No caminho inverso (arquivo gravado em cp1252 e lido como UTF-8), o Python lança um UnicodeDecodeError.
Por isso, a recomendação é sempre informar o encoding ao abrir arquivos de texto. O PEP 686 torna o UTF-8 o padrão a partir do Python 3.15, mas até lá (e para quem roda versões anteriores) passar encoding='utf-8' explicitamente é o jeito seguro. Arquivos abertos em modo binário ('rb', 'wb') não usam encoding.
Qual modo de abertura usar: r, w, a ou x?
A escolha do modo decide o que acontece com o arquivo antes de você ler ou escrever qualquer coisa. Esta tabela resume o comportamento de cada um (conferido rodando cada modo no Python 3.10):
| Modo | Lê? | Escreve? | Se o arquivo não existe | Se o arquivo já existe | Quando usar |
|---|---|---|---|---|---|
'r' (padrão) |
Sim | Não | FileNotFoundError |
Lê desde o início | Ler um txt, um arquivo de configuração |
'w' |
Não | Sim | Cria o arquivo | Apaga todo o conteúdo | Gerar um arquivo do zero (relatório, exportação) |
'a' |
Não | Sim, sempre no final | Cria o arquivo | Mantém e escreve no final | Logs, acumular registros |
'x' |
Não | Sim | Cria o arquivo | FileExistsError |
Criar sem risco de sobrescrever |
'r+' |
Sim | Sim | FileNotFoundError |
Mantém; escreve a partir da posição atual (por cima do texto) | Editar um arquivo que já existe |
'w+' |
Sim | Sim | Cria o arquivo | Apaga todo o conteúdo | Escrever e depois reler no mesmo bloco |
'a+' |
Sim | Sim, sempre no final | Cria o arquivo | Mantém; a leitura começa no final (use seek(0)) |
Acrescentar e também consultar |
'rb', 'wb', 'ab'
|
Bytes | Bytes | Igual a r, w e a
|
Igual a r, w e a
|
Imagens, PDFs, zip (sem encoding) |
Na dúvida: para ler, 'r'; para criar do zero, 'w'; para acrescentar sem perder nada, 'a'. O 't' (texto) é o padrão e raramente é escrito: 'r' e 'rt' são a mesma coisa.
Lendo um arquivo em Python
Agora que sabemos abrir o arquivo, podemos lê-lo.
Nos exemplos abaixo, o arquivo texto.txt tem este conteúdo:
1
2
3
Olá, Pythonista!
Esta é a segunda linha.
E esta é a terceira.
Para ler, utilizamos o método read(), que retorna todo o conteúdo do arquivo como uma string.
Veja o exemplo abaixo:
1
2
3
4
with open('texto.txt', 'r', encoding='utf-8') as arquivo:
conteudo = arquivo.read()
print(conteudo)
Neste exemplo, estamos lendo o conteúdo do arquivo aberto na variável arquivo e armazenando-o na variável conteudo. Em seguida, já fora do bloco with (com o arquivo fechado), exibimos o conteúdo na tela:
1
2
3
Olá, Pythonista!
Esta é a segunda linha.
E esta é a terceira.
Também é possível ler o arquivo linha por linha utilizando o método readline().
Este método retorna uma única linha do arquivo por vez. Veja um exemplo:
1
2
3
4
5
6
with open('texto.txt', 'r', encoding='utf-8') as arquivo:
primeira = arquivo.readline()
segunda = arquivo.readline()
print(repr(primeira))
print(repr(segunda))
Neste exemplo, a cada chamada do método readline(), uma nova linha do arquivo é lida. Usamos repr() para mostrar que cada linha vem com o \n (quebra de linha) no final:
1
2
'Olá, Pythonista!\n'
'Esta é a segunda linha.\n'
Para percorrer todas as linhas, o jeito mais simples é iterar diretamente sobre o arquivo com um for, usando strip() para remover a quebra de linha:
1
2
3
with open('texto.txt', 'r', encoding='utf-8') as arquivo:
for linha in arquivo:
print(linha.strip())
Saída:
1
2
3
Olá, Pythonista!
Esta é a segunda linha.
E esta é a terceira.
Se você precisa de todas as linhas de uma vez em uma lista (para acessar por índice, por exemplo), use readlines():
1
2
3
4
with open('texto.txt', 'r', encoding='utf-8') as arquivo:
linhas = arquivo.readlines()
print(linhas)
Saída:
1
['Olá, Pythonista!\n', 'Esta é a segunda linha.\n', 'E esta é a terceira.\n']
Resumindo: read() devolve uma string com tudo, readline() devolve uma linha por chamada, readlines() devolve uma lista de linhas e o for linha in arquivo lê uma linha por vez sem carregar o arquivo inteiro na memória (o melhor para arquivos grandes). A seção Reading and Writing Files do tutorial oficial mostra esses mesmos métodos.
Estou construindo o Ebookr.ai, uma plataforma onde você cria ebooks profissionais com IA sobre qualquer assunto - do zero ao PDF pronto, com capas e infográficos gerados automaticamente. Dá uma olhada!
Escrevendo em um arquivo em Python
Além de ler arquivos, também é possível escrever informações em um arquivo usando Python.
Para isso, utilizamos o método write(). Vejamos um exemplo:
1
2
with open('novo_texto.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('Olá, Mundo!')
Neste exemplo, criamos um novo arquivo chamado “novo_texto.txt” (ou sobrescrevemos, se ele já existir) e escrevemos a string “Olá, Mundo!” no arquivo. Ao sair do bloco with, o arquivo é fechado.
Só para comparação, este é o jeito manual, sem with, que você ainda vai encontrar em códigos antigos:
1
2
3
arquivo = open('novo_texto.txt', 'w', encoding='utf-8')
arquivo.write('Olá, Mundo!')
arquivo.close()
Aqui, somos nós que precisamos chamar close(). É importante fechar o arquivo depois de terminar de escrever para liberar os recursos do sistema operacional e garantir que o conteúdo seja gravado no disco. O problema: se acontecer um erro entre o open() e o close(), o close() nunca é executado e o arquivo fica aberto. É exatamente isso que o with resolve.
Para se aprofundar nos modos de escrita, veja o post sobre como escrever em arquivos no Python.
Como criar um arquivo em Python
Não existe uma função create(): em Python, um arquivo é criado quando você o abre em um modo de escrita ('w', 'a' ou 'x') e ele ainda não existe.
1
2
3
4
5
6
import os
with open('meu_arquivo.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('Arquivo criado com Python!\n')
print(os.path.exists('meu_arquivo.txt'))
Saída:
1
True
O os.path.exists() confirma que o arquivo foi criado (veja mais funções desse tipo no post sobre a biblioteca os do Python). O arquivo é criado na pasta de onde você executou o script (o diretório de trabalho, que você consulta com os.getcwd()), e não necessariamente na pasta onde está o .py.
O perigo do 'w' é sobrescrever um arquivo que já existia. Quando isso não pode acontecer, use o modo 'x', que só cria arquivos novos:
1
2
3
4
5
try:
with open('meu_arquivo.txt', 'x', encoding='utf-8') as arquivo:
arquivo.write('Só escrevo se o arquivo for novo')
except FileExistsError:
print('O arquivo já existe, nada foi sobrescrito')
Como meu_arquivo.txt foi criado no exemplo anterior, a saída é:
1
O arquivo já existe, nada foi sobrescrito
Para gravar várias linhas de uma vez a partir de uma lista, use writelines(). Ele não adiciona a quebra de linha sozinho, então cada item precisa terminar com \n:
1
2
3
4
5
6
7
frutas = ['maçã\n', 'banana\n', 'uva\n']
with open('frutas.txt', 'w', encoding='utf-8') as arquivo:
arquivo.writelines(frutas)
with open('frutas.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read(), end='')
Saída:
1
2
3
maçã
banana
uva
Manipulando arquivos com o statement with
Além de abrir e fechar arquivos manualmente, Python também oferece uma sintaxe mais conveniente para manipulação de arquivos.
O statement with é usado para abrir um arquivo e garantir que ele seja fechado corretamente, mesmo em caso de erro.
Vejamos um exemplo:
1
2
3
4
5
with open('novo_texto.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('Olá, Mundo!')
print(arquivo.closed)
print(arquivo.closed)
Dentro do bloco, o arquivo está aberto; assim que o bloco termina, ele é fechado automaticamente:
1
2
False
True
O arquivo é fechado mesmo que ocorra uma exceção dentro do bloco - na prática, o with equivale a um try/finally que chama close() no finally, só que sem você precisar escrever isso.
O statement with é especialmente útil quando manipulamos arquivos grandes ou quando há várias operações a serem realizadas no arquivo.
Ele garante que os recursos do sistema operacional sejam liberados de forma eficiente.
Ler e escrever arquivos é a base de boa parte dos projetos de automação - é esse tipo de aplicação prática que você constrói na Jornada Python, do básico ao avançado:
Como ler um arquivo CSV em Python (e no Google Colab)
Um CSV é só um arquivo de texto com valores separados por vírgula, então dá para abri-lo com o mesmo open(). Para não ter que separar as colunas na mão, use o módulo csv da biblioteca padrão. Com este vendas.csv:
1
2
3
4
produto,quantidade,preco
caderno,3,12.5
caneta,10,2.0
mochila,1,89.9
1
2
3
4
5
import csv
with open('vendas.csv', 'r', encoding='utf-8', newline='') as arquivo:
for linha in csv.DictReader(arquivo):
print(linha['produto'], linha['quantidade'])
Saída:
1
2
3
caderno 3
caneta 10
mochila 1
O newline='' é o que a documentação do módulo csv recomenda ao abrir arquivos CSV. Leitura, escrita e delimitadores diferentes estão no post sobre manipulação de CSV no Python.
Em análise de dados (e no Google Colab), o mais comum é usar o pandas, cujo pd.read_csv() aceita tanto um caminho local quanto um link público direto para o arquivo:
1
2
3
4
5
6
7
import pandas as pd
url = 'https://exemplo.com/dados/vendas.csv' # troque pelo link do seu CSV
df = pd.read_csv(url)
df.head()
No Colab, a última linha da célula é exibida automaticamente como tabela. Em um script .py, use print(df.head()). Com o vendas.csv acima servido por HTTP, a saída é:
1
2
3
4
produto quantidade preco
0 caderno 3 12.5
1 caneta 10 2.0
2 mochila 1 89.9
O link precisa apontar para o arquivo .csv em si. No GitHub, por exemplo, use o botão “Raw”: o endereço da página normal devolve HTML, não CSV. Para ir além, veja como importar CSV no pandas. Se o seu arquivo for JSON, o caminho é o post sobre como manipular JSON no Python.
Erros comuns
Estes são os erros que mais aparecem ao trabalhar com arquivos. As mensagens abaixo são reais, geradas rodando cada script com python3 main.py no Python 3.10 (no seu computador, o caminho do arquivo no traceback será outro). Para tratar qualquer um deles com try/except, veja o post sobre tratamento de erros e exceções no Python.
1. FileNotFoundError: abrir para leitura um arquivo que não existe
1
2
with open('dados.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read())
1
2
3
4
Traceback (most recent call last):
File "main.py", line 1, in <module>
with open('dados.txt', 'r', encoding='utf-8') as arquivo:
FileNotFoundError: [Errno 2] No such file or directory: 'dados.txt'
Correção: confira o nome (inclusive a extensão, dados.txt não é dados.txt.txt) e de qual pasta você está executando o script: caminhos relativos partem do diretório de trabalho (os.getcwd()), não da pasta do .py. Se a ideia era criar o arquivo, use 'w' ou 'a', que o criam quando ele não existe.
2. UnicodeDecodeError: ler com um encoding diferente do usado na gravação
1
2
3
4
5
with open('planilha.txt', 'w', encoding='cp1252') as arquivo:
arquivo.write('Olá, Mundo!')
with open('planilha.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read())
1
2
3
4
5
6
Traceback (most recent call last):
File "main.py", line 5, in <module>
print(arquivo.read())
File "/usr/lib/python3.10/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe1 in position 2: invalid continuation byte
Correção: leia com o mesmo encoding usado na gravação. Arquivos gerados por programas do Windows (como um CSV salvo pelo Excel) costumam estar em cp1252, então open('planilha.txt', encoding='cp1252') resolve. Nos arquivos que você mesmo cria, grave e leia sempre com encoding='utf-8'.
3. PermissionError: sem permissão para abrir o arquivo
1
2
with open('relatorio.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('Novo conteúdo')
1
2
3
4
Traceback (most recent call last):
File "main.py", line 1, in <module>
with open('relatorio.txt', 'w', encoding='utf-8') as arquivo:
PermissionError: [Errno 13] Permission denied: 'relatorio.txt'
Aqui, relatorio.txt estava marcado como somente leitura. Correção: verifique se o arquivo não é somente leitura, se você tem permissão na pasta e se ele não está aberto em outro programa (no Windows, uma planilha aberta no Excel fica travada). No Windows, tentar abrir uma pasta com open() também dá PermissionError; no Linux e no macOS, o erro é IsADirectoryError.
4. Usar 'w' quando queria acrescentar (e apagar o conteúdo)
1
2
3
4
5
6
7
8
with open('compras.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('arroz\nfeijão\n')
with open('compras.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('café\n')
with open('compras.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read())
1
café
Não aparece erro nenhum, e por isso é o mais perigoso: o segundo open(..., 'w') apagou arroz e feijão. Correção: para acrescentar, use o modo 'a'. Trocando o 'w' da linha 4 por 'a', a saída passa a ser:
1
2
3
arroz
feijão
café
5. Esquecer de fechar o arquivo (ou usá-lo depois de fechado)
Sem with, se você esquecer o close(), o texto pode ainda não ter chegado ao disco:
1
2
3
4
5
6
7
8
9
10
arquivo = open('saida.txt', 'w', encoding='utf-8')
arquivo.write('Olá, Mundo!')
with open('saida.txt', 'r', encoding='utf-8') as leitor:
print(repr(leitor.read()))
arquivo.close()
with open('saida.txt', 'r', encoding='utf-8') as leitor:
print(repr(leitor.read()))
1
2
''
'Olá, Mundo!'
Antes do close(), o texto ainda estava no buffer de memória e o arquivo parecia vazio. O erro oposto é usar o arquivo depois que o with já o fechou:
1
2
3
4
with open('mensagem.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('Olá!')
conteudo = arquivo.read()
1
2
3
4
Traceback (most recent call last):
File "main.py", line 4, in <module>
conteudo = arquivo.read()
ValueError: I/O operation on closed file.
Correção: use sempre with e faça todo o trabalho com o arquivo dentro do bloco (indentado). Se precisar do conteúdo depois, guarde-o em uma variável lá dentro. E lembre que um arquivo aberto com 'w' não pode ser lido: arquivo.read() nele dá io.UnsupportedOperation: not readable.
Exercícios resolvidos
Tente resolver cada exercício antes de abrir a solução. Todas as saídas foram geradas executando o código. Se quiser praticar isso com projetos guiados, do básico a aplicações completas, conheça o nosso curso de Python completo.
Exercício 1. Crie um arquivo saudacao.txt com o texto Olá, Pythonista! e, em seguida, leia o arquivo e mostre o conteúdo na tela.
Ver solução
1
2
3
4
5
with open('saudacao.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('Olá, Pythonista!\n')
with open('saudacao.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read().strip())
Saída: Olá, Pythonista!
O primeiro with cria o arquivo no modo 'w'; o segundo abre no modo 'r' para ler. O strip() remove o \n final.
Exercício 2. Conte quantas linhas tem o arquivo texto.txt usado neste artigo (três linhas de texto).
Ver solução
1
2
3
4
with open('texto.txt', 'r', encoding='utf-8') as arquivo:
total = sum(1 for linha in arquivo)
print(f'O arquivo tem {total} linhas')
Saída: O arquivo tem 3 linhas
Iterar sobre o arquivo entrega uma linha por vez, então somar 1 para cada linha dá o total sem carregar o arquivo inteiro na memória.
Exercício 3. Escreva uma função registrar(mensagem) que acrescente cada mensagem em uma nova linha de log.txt, sem apagar as anteriores. Registre Programa iniciado e Programa finalizado e mostre o log.
Ver solução
1
2
3
4
5
6
7
8
9
def registrar(mensagem):
with open('log.txt', 'a', encoding='utf-8') as arquivo:
arquivo.write(f'{mensagem}\n')
registrar('Programa iniciado')
registrar('Programa finalizado')
with open('log.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read(), end='')
Saída (na primeira execução):
1
2
Programa iniciado
Programa finalizado
O modo 'a' cria o arquivo se ele não existir e sempre escreve no final. Se você rodar o script de novo, o log passa a ter quatro linhas, porque nada é apagado.
Exercício 4. (Questão de prova) Qual a forma correta de abrir um arquivo no modo de escrita?
a) arquivo = open("arquivo.txt", "r")
b) arquivo = open("arquivo.txt", "w")
c) arquivo = open("arquivo.txt", "rb")
d) arquivo = open("arquivo.txt")
Ver solução
1
2
with open('arquivo.txt', 'w', encoding='utf-8') as arquivo:
print(arquivo.mode, arquivo.writable(), arquivo.readable())
Saída: w True False
Alternativa b. O modo "w" abre para escrita (e o arquivo aceita write() mas não read()). As alternativas a e d abrem para leitura, já que "r" é o padrão quando o modo é omitido, e c abre para leitura binária.
Exercício 5. (Questão de prova) Sobre os modos usados na manipulação de arquivos em Python, analise:
I - O modo r abre o arquivo somente para leitura, e o arquivo já deve existir.
II - O modo w abre o arquivo para escrita e, se ele já existir, acrescenta o novo conteúdo ao final.
III - O modo a abre o arquivo para anexar e cria o arquivo caso ele não exista.
Está correto o que se afirma em:
a) I, apenas.
b) I e II, apenas.
c) I e III, apenas.
d) I, II e III.
Ver solução
1
2
3
4
5
6
7
8
9
10
11
12
13
14
with open('prova.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('primeira')
with open('prova.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('segunda')
with open('prova.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read())
with open('nao_existia.txt', 'a', encoding='utf-8') as arquivo:
arquivo.write('criado pelo modo a')
with open('nao_existia.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read())
Saída:
1
2
segunda
criado pelo modo a
Alternativa c. A afirmação II é falsa: o modo w apaga o conteúdo existente (a saída mostra só segunda). Quem acrescenta ao final é o a, que também cria o arquivo quando ele não existe, como mostra a segunda linha da saída.
Exercício 6. (Questão de prova) Você está usando o Google Colab e quer trabalhar com os dados de um arquivo CSV disponível em um link público. Organize os blocos de código abaixo na ordem correta:
A) df.head()
B) import pandas as pd
C) df = pd.read_csv(url)
D) url = 'https://exemplo.com/dados/vendas.csv'
Ver solução
Ordem correta: B, D, C, A.
1
2
3
4
5
6
7
import pandas as pd
url = 'https://exemplo.com/dados/vendas.csv'
df = pd.read_csv(url)
df.head()
Com o vendas.csv da seção sobre CSV, print(df.head()) mostra:
1
2
3
4
produto quantidade preco
0 caderno 3 12.5
1 caneta 10 2.0
2 mochila 1 89.9
Primeiro importa-se a biblioteca (senão pd não existe), depois define-se a variável url, que precisa existir antes de ser usada no read_csv(), e só então dá para exibir as primeiras linhas do DataFrame com head() (5 por padrão).
Exercício 7. Leia o arquivo nomes.txt (com ana, bruno e carla, um por linha) e grave em nomes_maiusculos.txt os mesmos nomes em letras maiúsculas.
Ver solução
1
2
3
4
5
6
7
8
9
10
with open('nomes.txt', 'w', encoding='utf-8') as arquivo:
arquivo.write('ana\nbruno\ncarla\n')
with open('nomes.txt', 'r', encoding='utf-8') as origem, \
open('nomes_maiusculos.txt', 'w', encoding='utf-8') as destino:
for linha in origem:
destino.write(linha.upper())
with open('nomes_maiusculos.txt', 'r', encoding='utf-8') as arquivo:
print(arquivo.read(), end='')
Saída:
1
2
3
ANA
BRUNO
CARLA
Um único with pode abrir dois arquivos, separados por vírgula: um para leitura e outro para escrita. Os dois são fechados ao final do bloco.
Exercício 8. Escreva uma função ler_arquivo(caminho) que devolva o conteúdo do arquivo ou, se ele não existir, a mensagem Arquivo <caminho> não encontrado, sem deixar o programa quebrar.
Ver solução
1
2
3
4
5
6
7
8
def ler_arquivo(caminho):
try:
with open(caminho, 'r', encoding='utf-8') as arquivo:
return arquivo.read()
except FileNotFoundError:
return f'Arquivo {caminho} não encontrado'
print(ler_arquivo('nao_existe.txt'))
Saída: Arquivo nao_existe.txt não encontrado
O open() no modo 'r' lança FileNotFoundError quando o arquivo não existe; o except captura exatamente esse erro e devolve uma mensagem no lugar do traceback.
Está curtindo esse conteúdo? ![]()
Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?
Conclusão
Neste artigo, aprendemos como abrir, ler e escrever arquivos em Python.
Vimos que o processo é bastante simples e intuitivo, utilizando a função open() para abrir o arquivo, os métodos read() e readline() para ler o conteúdo e o método write() para escrever informações no arquivo.
Também vimos que o statement with garante o fechamento adequado do arquivo e que é importante informar encoding='utf-8' para não depender da codificação padrão do sistema operacional.
Por fim, vimos como escolher o modo certo ('r' para ler, 'w' para criar do zero, 'a' para acrescentar e 'x' para não sobrescrever), como ler CSV com o módulo csv e com o pandas, e como reconhecer e corrigir os erros mais comuns: FileNotFoundError, UnicodeDecodeError, PermissionError e o arquivo usado depois de fechado.
A manipulação de arquivos em Python é uma habilidade fundamental para qualquer programador, e é especialmente importante em projetos que envolvam processamento de dados, gerenciamento de informações ou criação de registros.
Com o conhecimento adquirido neste artigo, você estará pronto para utilizar arquivos em seus projetos Python de forma eficiente e eficaz.
Nos vemos na próxima, Pythonista! 👋
Perguntas frequentes
Como abrir um arquivo em Python?
Use a função open() dentro de um bloco with, informando o nome do arquivo, o modo e o encoding: with open("texto.txt", "r", encoding="utf-8") as arquivo:. Dentro do bloco você lê com arquivo.read() ou escreve com arquivo.write(). Ao sair do bloco, o Python fecha o arquivo sozinho, mesmo que aconteça um erro.
Qual a diferença entre os modos r, w e a no open()?
O modo "r" (padrão) abre só para leitura e lança FileNotFoundError se o arquivo não existir. O modo "w" abre para escrita, cria o arquivo se ele não existir e apaga todo o conteúdo se ele já existir. O modo "a" também cria o arquivo quando necessário, mas mantém o conteúdo e escreve sempre no final (anexar). Há ainda o "x", que só cria arquivos novos e lança FileExistsError se o arquivo já existir.
Como criar um arquivo em Python?
Abra o arquivo no modo "w" (ou "a") e ele é criado se ainda não existir: with open("novo.txt", "w", encoding="utf-8") as arquivo: arquivo.write("Olá!"). Cuidado: se o arquivo já existir, o modo "w" apaga o conteúdo anterior. Para criar só quando o arquivo ainda não existe, use o modo "x", que lança FileExistsError em vez de sobrescrever.
Como ler um arquivo txt linha por linha em Python?
Itere diretamente sobre o arquivo com um for: with open("texto.txt", encoding="utf-8") as arquivo: e, dentro do bloco, for linha in arquivo: print(linha.strip()). Cada linha vem com a quebra \n no final, por isso o strip(). Também existem readline() (uma linha por chamada) e readlines() (lista com todas as linhas), mas o for é o jeito mais simples e econômico em memória.
Por que usar with open() em vez de open() e close()?
O with fecha o arquivo automaticamente ao final do bloco, mesmo se ocorrer uma exceção no meio do caminho. Com open() e close() manuais, um erro antes do close() deixa o arquivo aberto, e o texto escrito pode ficar em buffer sem ir para o disco. Na prática, o with equivale a um try/finally que chama close().
Por que passar encoding=”utf-8” no open()?
Sem o parâmetro encoding, o Python usa a codificação padrão do sistema operacional, que no Windows em português costuma ser cp1252, e no Linux e no macOS costuma ser UTF-8. Isso faz o mesmo código gravar ou ler acentos de forma diferente em cada máquina, gerando texto quebrado (como Olá) ou UnicodeDecodeError. Passar encoding="utf-8" deixa o comportamento previsível.
(Questão de prova) Qual a forma correta de abrir um arquivo no modo de escrita?
A forma correta é arquivo = open("arquivo.txt", "w") (de preferência com with e encoding="utf-8"). O modo "r" abre só para leitura, "rb" é leitura binária e open("arquivo.txt") sem modo também é leitura, porque "r" é o padrão. Se a intenção for acrescentar sem apagar o conteúdo existente, o modo certo é "a".
Como ler um arquivo CSV de um link público no Google Colab?
Importe o pandas, guarde o link em uma variável e passe-o para pd.read_csv(), que aceita URLs diretamente: import pandas as pd, depois url = "https://.../dados.csv", df = pd.read_csv(url) e, por fim, df.head() para ver as primeiras linhas. O link precisa apontar para o arquivo .csv em si (no GitHub, use o botão Raw), e não para uma página HTML.
"Porque o Senhor dá a sabedoria, e da sua boca vem a inteligência e o entendimento" Pv 2:6