Abrir ficheiros em segurança com gestores de contexto

Concluído

Tip

Consulte a guia Texto e imagens para obter mais detalhes!

Para trabalhar com um ficheiro em Python, primeiro, tem de o abrir. Abrir um ficheiro dá-te um objeto de ficheiro do qual podes ler ou escrever. Quando terminar, precisa de fechar o ficheiro para que o sistema operativo possa libertar os seus recursos e quaisquer escritas pendentes sejam guardadas.

O problema de esquecer de fechar um ficheiro

Pode abrir um ficheiro com open() e fechá-lo com .close():

file = open("notes.txt", "r")
contents = file.read()
print(contents)
file.close()

O problema é que, se acontecer um erro depois de open() mas antes de .close(), o ficheiro fica aberto — o que pode levar à perda de dados, a ficheiros bloqueados ou a fugas de recursos.

Utilizar a instrução with

A forma mais segura e mais idiomática em Python para trabalhar com ficheiros é a instrução with. Utiliza uma funcionalidade chamada gestor de contexto que fecha automaticamente o ficheiro quando o bloco termina — mesmo que ocorra um erro.

with open("notes.txt", "r") as file:
    contents = file.read()
    print(contents)
# File is automatically closed here

Tudo o que vem depois as é o nome que dás ao objeto de ficheiro dentro do bloco. Quando o bloco termina, o ficheiro é fechado para si.

Modos de ficheiro

O segundo argumento open() é o modo, que diz ao Python o que planeias fazer com o ficheiro:

Mode Meaning
"r" Lido (por defeito). O ficheiro já deve existir.
"w" Escreva. Cria um novo ficheiro ou sobrescreve o existente.
"a" Anexar. Adiciona no final do ficheiro ou cria-o caso não exista.
"r+" Ler e escrever.

Escolhe o modo que corresponde ao que queres fazer — usar o modo errado é uma causa comum de ficheiros apagados acidentalmente.

Uma predefinição mais segura

Para o resto deste módulo, abra sempre ficheiros usando with. É o padrão mais seguro e aquele que vais ver em quase todas as bases de código Python reais.