J'écris actuellement un petit script à utiliser sur l'un de nos serveurs en utilisant Python. Le serveur n'a installé que Python 2.4.4.
Je n'ai pas commencé à utiliser Python avant la sortie de 2.5, donc je suis habitué au formulaire:
with open('file.txt', 'r') as f:
# do stuff with f
Cependant, il n'y a pas de with
déclaration avant 2.5, et j'ai du mal à trouver des exemples sur la bonne façon de nettoyer manuellement un objet fichier.
Quelle est la meilleure pratique pour se débarrasser des objets fichier en toute sécurité lors de l'utilisation d'anciennes versions de python?
open
échec, une exception sera déclenchée avant même que letry/finally
bloc ne soit entré. Doncclose
ne sera pas appelé. (C'est pourquoi vous devriez appeleropen
avant letry
.)open
levée d'une exception.Dans la solution ci-dessus, répétée ici:
f = open('file.txt', 'r') try: # do stuff with f finally: f.close()
si quelque chose de mauvais se produit (on ne sait jamais ...) après l'ouverture du fichier avec succès et avant l'essai, le fichier ne sera pas fermé, donc une solution plus sûre est:
f = None try: f = open('file.txt', 'r') # do stuff with f finally: if f is not None: f.close()
la source
with open(...)
est certainement le meilleur choix en Python moderne.Pas besoin de fermer le fichier selon la documentation si vous utilisez avec:
>>> with open('workfile', 'r') as f: ... read_data = f.read() >>> f.closed True
Plus d'informations ici: https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects
la source
Voici un exemple donné qui donc comment utiliser
open
et "pythonclose
from sys import argv script,filename=argv txt=open(filename) print "filename %r" %(filename) print txt.read() txt.close() print "Change the file name" file_again=raw_input('>') print "New file name %r" %(file_again) txt_again=open(file_again) print txt_again.read() txt_again.close()
Il est nécessaire de savoir combien de fois vous avez ouvert le fichier pour le fermer.
la source
open
mais avantclose
, le fichier ne sera pas correctement fermé en utilisant cette approche. L'utilisation dewith
outry
/finally
ferme le fichier correctement même en présence d'exceptions.