Está fechando um arquivo depois de abri-lo com 'open ()' requerido em Python? [fechadas]

5

Em relação à minha pergunta anterior, notei que em ambas as respostas que usaram a função open() , não houve menção de fechar o arquivo.

Eu li que é uma boa prática fazê-lo, mas há realmente alguma necessidade para isso? É apenas um código desnecessário?

O arquivo é fechado automaticamente?

    
por DevRobot 23.11.2015 / 13:43

1 resposta

6

Quando os arquivos são fechados?

Como podemos aprender com O fechamento de arquivos é importante? (StackOverflow) , o interpretador Python fecha o arquivo nos seguintes casos:

  • você invoca manualmente o método close() de um objeto file explicitamente ou implicitamente, deixando um bloco with open(...): . Isso funciona, claro, sempre e em qualquer implementação do Python.
  • a última referência do objeto file foi removida e, portanto, o objeto é processado pelo Garbage Collector. Este não é um recurso de linguagem, mas apenas uma característica especial da implementação do CPython, portanto, para portabilidade, não confie nisto!
  • o intérprete do Python termina. Nesse caso, deve fechar todas as alças de arquivos que foram abertas. Algumas versões mais antigas do Python3 também imprimiram um aviso de que você deveria tê-las fechado manualmente. No entanto, imagine uma falha ou você forçar a eliminação do interpretador Python e verá que isso também não é confiável.

Portanto, somente o primeiro método (manual) é confiável!

O que aconteceria se um arquivo permanecesse aberto?

Primeiro, dependendo da implementação do seu interpretador Python, se você abriu um arquivo com acesso de gravação, não pode ter certeza de que suas modificações foram liberadas no disco até que você o induza manualmente ou o manipulador de arquivos seja fechado. / p>

Em segundo lugar, você só pode abrir um número limitado de arquivos no seu sistema por usuário. Se você exceder esse limite, por exemplo, abrindo muitos arquivos em um loop em seu programa Python sem fechá-los o mais rápido possível, o sistema pode se recusar a abrir mais identificadores de arquivo para você e você receberá uma exceção. Também pode acontecer de o seu programa receber o último arquivo aberto permitido e outro programa falhar porque é recusado.

Em terceiro lugar, os arquivos abertos em um dispositivo removível evitam que ele seja desmontado ou ejetado. Você ainda pode excluir o arquivo em alguns sistemas de arquivos como ext4 , onde simplesmente o descritor de arquivo / link para o inode do arquivo é removido / desvinculado, mas o programa que abriu o arquivo ainda pode acessar o inode através de seu próprio manipulador de arquivo temporário. Isto é, e. também o mecanismo que permite atualizar pacotes enquanto o respectivo software está sendo executado. No entanto, por ex. O NTFS não possui esse recurso. No entanto, ele nunca pode ser modificado por dois processos simultâneos, portanto, ele ainda será de alguma forma bloqueado para outros.

    
por Byte Commander 23.11.2015 / 15:58

Tags