Abrindo e Fechando Arquivos em Python
Python suporta diversos tipos de arquivos, mas, de forma geral, eles podem ser divididos em dois tipos: texto e binário. Arquivos de texto são, por exemplo, arquivos com extensões como csv, txt e html: em geral, quaisquer arquivos que armazenam informações em formato de texto. Arquivos binários incluem imagens, áudios, vídeos etc. Dependendo do tipo de arquivo, a forma de trabalhar com ele pode variar.
Ao trabalhar com arquivos, é necessário seguir uma sequência de operações:
- Abrir o arquivo usando a função
open()
- Ler o arquivo com o método
read()
ou escrever no arquivo usando o métodowrite()
- Fechar o arquivo com o método
close()
Para começar a trabalhar com um arquivo, é preciso abri-lo usando a função open()
, que tem a seguinte definição formal:
open(file, mode)
O primeiro parâmetro da função representa o caminho para o arquivo. Esse caminho pode ser absoluto, começando com a letra da unidade de disco, por exemplo, C://somedir/somefile.txt
. Ou pode ser relativo, como somedir/somefile.txt—neste caso
, a busca pelo arquivo será feita em relação ao local onde o script Python está sendo executado.
O segundo argumento, mode, define o modo de abertura do arquivo, dependendo do que pretendemos fazer com ele. Existem quatro modos principais:
r (Read)
: O arquivo é aberto para leitura. Se o arquivo não for encontrado, é exceçãoFileNotFoundError
.w (Write)
: O arquivo é aberto para escrita. Se o arquivo não existir, ele é criado. Se já existir, ele é recriado e os dados antigos são apagados.a (Append)
: O arquivo é aberto para adição. Se o arquivo não existir, ele é criado. Se já existir, os dados são adicionados ao final.b (Binary)
: Usado para trabalhar com arquivos binários. É aplicado junto com outros modos, comow
our
, por exemplo,rb
(leitura de arquivos binários) ewb
(escrita de arquivos binários).
Outros modos incluem:
r+
:O arquivo é aberto para leitura e escrita. Se o arquivo não for encontrado, é levantada a exceçãoFileNotFoundError
.w+
: O arquivo é aberto para leitura e escrita. Se o arquivo não existir, ele é criado automaticamente. Se já existir, ele é sobrescrito.a+
: O arquivo é aberto para leitura e escrita. Se o arquivo não existir, ele é criado automaticamente. Se já existir, os dados são adicionados ao final.
Por exemplo, abrindo um arquivo de texto para escrita:
myfile = open("hello.txt", "w")
Ou abrindo um arquivo binário para leitura:
myfile = open("image.png", "rb")
Após concluir o trabalho com o arquivo, é importante fechá-lo usando o método close()
. Esse método libera todos os recursos associados ao arquivo.
Por exemplo, vamos abrir para escrita um arquivo chamado "hello.txt"
e fechá-lo:
myfile = open("hello.txt", "w")
myfile.close()
Ao abrir o arquivo ou durante o trabalho com ele, podemos nos deparar com várias exceções, como falta de acesso ao arquivo. Nesse caso, o programa exibirá um erro e não chegará a executar o método close()
, deixando o arquivo aberto.
Para lidar com isso, podemos tratar as exceções:
try:
myfile = open("hello.txt", "w")
try:
# Aqui são executadas as funções de trabalho com o arquivo
print("Trabalhando com o arquivo")
except Exception as ex:
# Se ocorrer um erro durante o trabalho com o arquivo, ele será tratado aqui
print("Erro ao trabalhar com o arquivo:", ex)
finally:
# Este bloco é sempre executado, independentemente de ocorrer um erro ou não durante o trabalho com o arquivo
myfile.close()
except Exception as ex:
# Erro ao abrir o arquivo
print("Erro ao abrir o arquivo:", ex)
No exemplo acima, o bloco try
tenta abrir o arquivo. Se ocorrer um erro, ele é tratado no bloco except
. Se o arquivo for aberto com sucesso, o bloco try
executa as funções de trabalho com o arquivo. Se ocorrer um erro durante o trabalho com o arquivo, ele é tratado no bloco except
. O bloco finally
é sempre executado, independentemente de ocorrer um erro ou não durante o trabalho com o arquivo.
No entanto, a maneira mais recomendada de lidar com arquivos em Python é usando a construção with
, que gerencia automaticamente os recursos do arquivo:
try:
with open("hello.txt", "w") as myfile:
print("Trabalhando com o arquivo")
except Exception as ex:
print("Erro ao trabalhar com arquivo:", ex)
Neste caso, o arquivo é fechado automaticamente após a execução do bloco with
, independentemente de ocorrer um erro ou não. Isso evita que o arquivo fique aberto, eliminando a necessidade de chamar o método close()
.
Documentação oficial: