Saltar al contenido

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

El paso a paso o código que verás en este post es la resolución más fácil y válida que hallamos a tus dudas o problema.

Solución:

Es mejor usar un with declaración en su lugar, que cierra el archivo cuando finaliza la declaración, 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 suceda es indeterminado y casi imposible de predecir.

Utilizando el with declaración es el mejor enfoque, pero solo para ser contrario, si no usó withdebe conservar un identificador de archivo… y cerrar desde allí.

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

y en el otro script:

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

Esto es esencialmente lo que with 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á en un momento no especificado en el futuro. O posiblemente podría rastrear una referencia al objeto de archivo usando el gc módulo y luego ciérrelo. Existen algunos códigos que pueden ayudarlo 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 debe evitar rastrear a través de la gc módulo a menos que realmente esté en un aprieto.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *