Comment fermer le fichier après la saumure.load() en python
J'ai sauvé un python dictionnaire de cette façon:
import cPickle as pickle
pickle.dump(dictname, open("filename.pkl", "wb"))
Et je le charger dans un autre script de cette façon:
dictname = pickle.load(open("filename.pkl", "rb"))
Comment est-il possible de fermer le fichier après cela?
OriginalL'auteur user2961420 | 2013-11-20
Vous devez vous connecter pour publier un commentaire.
Il est préférable d'utiliser une
déclaration au lieu de cela, ce qui ferme le fichier lors de la déclaration se termine, même si une exception se produit:
Sinon, le fichier ne se ferment lorsque le garbage collector s'exécute, et lorsque cela se produit, est de durée indéterminée et presque impossible à prédire.
OriginalL'auteur Adam Rosenfield
À l'aide de la
with
déclaration est la meilleure approche, mais juste pour être contraire, si vous n'utilisez paswith
, vous devriez retenir les services d'un descripteur de fichier... et près de là.et dans l'autre script:
C'est essentiellement ce qui
with
est fait pour vous.Cependant... si vous étiez coincé (pour quelque raison que ce soit), avec le code que vous avez posté, et pour répondre à ta question d'origine... oui, le garbage collector sera pour vous à un temps indéterminé dans l'avenir. Ou vous pourriez peut-être retrouver une référence à l'objet de fichier à l'aide de la
gc
module, puis le fermer. Il y a quelques codes de là-bas qui peut vous aider à le faire, par exemple: https://github.com/uqfoundation/dill/blob/master/dill/pointers.pyCependant,
with
etf.close()
sont beaucoup beaucoup plus préféré, et vous devriez éviter de suivi par le biais de lagc
module, sauf si vous êtes vraiment dans le pétrin.OriginalL'auteur Mike McKerns