Abrir ficheiros em segurança com gestores de contexto
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.