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ção- FileNotFoundError.
- 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, como- wou- r, por exemplo,- rb(leitura de arquivos binários) e- wb(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ção- FileNotFoundError.
- 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: