207 votes

ouvrir lire et fermer un fichier dans 1 ligne de code

Maintenant j'utilise:

 pageHeadSectionFile = open('pagehead.section.htm','r')
output = pageHeadSectionFile.read()
pageHeadSectionFile.close
 

Mais pour améliorer l'apparence du code, je peux faire:

 output = open('pagehead.section.htm','r').read()
 

Comment utiliser la syntaxe ci-dessus pour fermer le fichier afin de libérer des ressources système?

253voto

Tim Pietzcker Points 146308

Vous n'avez donc pas à le fermer - Python fera automatiquement, soit lors de la collecte des ordures ou à la sortie du programme. Mais comme @delnan noté, il est préférable de fermer explicitement pour des raisons diverses.

Donc, ce que vous pouvez faire pour le garder court, simple et explicite:

with open('pagehead.section.htm','r') as f:
    output = f.read()

Maintenant, c'est juste deux lignes et assez lisible, je pense.

Par ailleurs, dans votre code, vous n'êtes pas de la fermeture du fichier, soit parce que vous avez oublié les parenthèses en .close() (ce que vous allez faire maintenant est de créer une référence à la méthode elle-même (qui, sauf si vous imprimer le résultat, ne pas faire n'importe quoi) au lieu de l'appeler).

27voto

Sven Marnach Points 133943

L'aide Disponible, votre dossier sera fermé immédiatement après la ligne est exécutée, parce que le fichier objet est immédiatement nettoyée. Il y a deux inconvénients, si:

  1. En Python des implémentations différentes de Disponible, le fichier n'est souvent pas immédiatement fermé, mais plutôt à un moment plus tard, au-delà de votre contrôle.

  2. En Python 3.2 ou supérieur, cela permettra de jeter un ResourceWarning, si elle est activée.

Mieux d'investir une seule ligne supplémentaire:

with open('pagehead.section.htm','r') as f:
    output = f.read()

Cela permettra d'assurer que le fichier est correctement fermé dans toutes les circonstances.

13voto

Joël Points 1201

Ce que vous pouvez faire est d’utiliser l’énoncé with :

 >>> with open('pagehead.section.htm', 'r') as fin:
...     output = fin.read()
 

La déclaration with se chargera d'appeler la fonction __exit__ de l'objet donné même si quelque chose de mauvais s'est passé dans votre code; c'est proche de la syntaxe try... finally . Pour les objets renvoyés par open , __exit__ correspond à la fermeture du fichier.

Cette déclaration a été introduite avec Python 2.6.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X