Python non chiude il file quando si apre it.thus quando si passa nel codice seguente, senza avvolgendo lo script with
dichiarazione:
data = cPickle.load(open("filename.pkl", 'r'))
È necessario chiudere manualmente se.
Questo è un esempio di documentazione modulo python su pickle
modulo:
import pprint, pickle
pkl_file = open('data.pkl', 'rb')
data1 = pickle.load(pkl_file)
pprint.pprint(data1)
data2 = pickle.load(pkl_file)
pprint.pprint(data2)
pkl_file.close()
Come si può vedere il file è stato chiuso alla fine del codice!
anche per maggiori informazioni leggete la seguente documentazione pitone di chiudere un file:
Quando hai finito con un file, chiamata f.close()
per chiuderla e liberare tutte le risorse di sistema prese dal aperta file. Dopo aver chiamato f.close()
, i tentativi di utilizzare l'oggetto file falliranno automaticamente.
>>> f.close()
>>> f.read()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: I/O operation on closed file
E 'buona norma utilizzare la parola chiave con quando si tratta di oggetti file. Ciò ha il vantaggio che il file viene chiuso correttamente al termine della sua suite, anche se viene sollevata un'eccezione durante il percorso. E 'anche molto più breve rispetto alla scrittura equivalenti try-finally blocchi:
>>>
>>> with open('workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
Sì, l'oggetto file saranno chiuse una volta che è garbage collection. Non importa se 'cPickle' genera un'eccezione o meno. Ma dal momento che non abbiamo il controllo su quando accadrà, è davvero una cattiva pratica, cioè attaccare con 'with'. – freakish