Sto lavorando a uno script Python che deve creare circa 50 distinti file temporanei, che vengono tutti aggiunti di frequente durante il corso dello script e uniti alla fine. Sono sicuro che il modulo tempfile
può fare ciò di cui ho bisogno, ma non sono stato in grado di capire come leggere la documentazione.Come usare Python's tempfile.NamedTemporaryFile()?
Desidero utilizzare i file temporanei, al contrario delle variabili, per risparmiare memoria di sistema, poiché questi blocchi di dati diventano grandi mentre lo script elabora decine di migliaia di altri file.
Il seguente pezzo di codice è la mod Attualmente sto usando per creare questi file (untemporarily) in una directory untemporary:
item = (string from another file) # string must id file for future use
tmpfile = 'tmpfiles/' + item
if item not in totalitems:
totalitems.add(item)
with open(tmpfile, 'w') as itemfile:
output = some stuff
tmpfile.write(output)
else:
with open(tmpfile, 'a') as itemfile:
output = different stuff
tmpfile.write(output)
Penso che quello che ho bisogno è tempfile.NamedTemporaryFile()
. Secondo il documentation:
Questo nome può essere recuperato da parte del membro nome dell'oggetto file.
Purtroppo, non capisco cosa significhi. Devo solo essere in grado di richiamare ogni file più tardi quando corro di nuovo il suo "elemento" corrispondente nei file che sto elaborando. Presumo che questo sia piuttosto semplice e io sto solo diventando denso. Nel caso abbia importanza, ho versioni di questo script sia per Python 2.7.1 che per 3.2.3. Ho davvero bisogno solo dell'uno o dell'altro per lavorare; Ho creato sia come esercizio di apprendimento.
possibile duplicato di [modo migliore per generare i nomi di file casuali in Python] (http://stackoverflow.com/questions/10501247/best-way- to-generate-random-file-names-in-python) – Joe
@Joe, Parte di questa domanda sembra essere un duplicato del thread che hai collegato. Parte di ciò non è; vedi il commento sotto la risposta di Levon sotto. – Gregory
Perché hai bisogno che questi file siano nominati? Se sono senza nome (pre-eliminati), c'è meno da sbagliare in termini di pulizia. Puoi semplicemente memorizzare l'oggetto tmpfile, non il suo nome, e quindi chiamare 'seek (0)' per andare all'inizio per essere pronto a leggere ... o mmap il suo contenuto, o comunque accedervi come preferisci. –