Cómo cerrar el archivo después de pickle.load () en python

Guardé un diccionario de python de esta manera:

import cPickle as pickle pickle.dump(dictname, open("filename.pkl", "wb")) 

Y lo cargo en otro script de esta manera:

 dictname = pickle.load(open("filename.pkl", "rb")) 

¿Cómo es posible cerrar el archivo después de esto?

Es mejor usar una sentencia with , que cierra el archivo cuando finaliza la sentencia, incluso si se produce una excepción:

 with open("filename.pkl", "wb") as f: pickle.dump(dictname, f) ... with open("filename.pkl", "rb") as f: dictname = pickle.load(f) 

De lo contrario, el archivo solo se cerrará cuando se ejecute el recolector de basura, y cuando eso ocurra es indeterminado y casi imposible de predecir.

Usar el enunciado with es el mejor enfoque, pero solo para ser contrario, si no usó with , debe conservar un identificador de archivo … y cerrar desde allí.

 f = open('filename.pkl', 'wb') pickle.dump(dictname, f) f.close() 

y en el otro guión:

 f = open('filename.pkl','rb') dictname = pickle.load(f) f.close() 

Esto es esencialmente lo que está haciendo por ti.

Sin embargo … si se quedó atascado (por cualquier motivo), con el código que publicó originalmente y para responder a su pregunta original … sí, el recolector de basura lo cerrará por usted en un momento no especificado en el futuro. O posiblemente podría rastrear una referencia al objeto de archivo usando el módulo gc , y luego cerrarlo. Hay algunos códigos que pueden ayudarte a hacer esto, por ejemplo: https://github.com/uqfoundation/dill/blob/master/dill/pointers.py

Sin embargo, with y f.close() son mucho más preferidos, y debes evitar el rastreo a través del módulo gc menos que realmente estés en un aprieto.