C'è un modo semplice per utilizzare un file temporaneo pitone in un ripiano (e assicurarsi che si pulisce)?

StackOverflow https://stackoverflow.com/questions/1298037

  •  18-09-2019
  •  | 
  •  

Domanda

In sostanza, voglio una dimensione infinita (più precisamente, hard-drive piuttosto che la memoria legato) dict in un programma Python che sto scrivendo. Sembra che il file temporaneo e accantonare moduli sono naturalmente adatti per questo, tuttavia, non posso vedere come usarli insieme in modo sicuro. Voglio che il file temporaneo da eliminare quando il ripiano è GCed (o garanzia eliminazione dopo il ripiano è fuori uso, indipendentemente da quando), ma l'unica soluzione che posso venire con questo comporta l'uso di tempfile.TemporaryFile () per aprire un handle di file, ricevendo il nome del file dal manico, usando questo nome di file per l'apertura di un ripiano, mantenendo il riferimento al file handle per evitare che si GCed (e il file eliminato), e poi mettere un wrapper sul ripiano che memorizza questo riferimento. Qualcuno ha una soluzione migliore di questo pasticcio contorta?

Restrizioni:. Possono utilizzare solo la libreria standard di Python e devono essere piattaforma completamente trasversale

È stato utile?

Soluzione

avrei preferito ereditare da shelve.Shelf, e sovrascrivere il metodo close (*) per scollegare i file. Si noti che, a seconda del modulo dbm specifica in uso, si può avere più di un file che contiene il ripiano. Una soluzione potrebbe essere quella di creare una directory temporanea, piuttosto che un file temporaneo, e rimuovere tutto ciò nella directory quando fatto. L'altra soluzione sarebbe quella di legarsi ad uno specifico modulo dbm (diciamo, bsddb o dumbdbm), e rimuovere in particolare quei file che creano queste librerie.

(*) Si noti che il metodo close uno scaffale è chiamata anche quando il ripiano è garbage collection. L'unico caso come si potrebbe finire con file spazzatura è quando l'interprete si blocca o viene ucciso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top