Ho bisogno di aggiornare un file. L'ho letto e lo ho scritto con le modifiche. Tuttavia, preferirei scrivere su un file temporaneo e rinominarlo in posizione.In python, creare un tempfile nella stessa directory di un altro file?
temp = tempfile.NamedTemporaryFile()
tempname = temp.name
temp.write(new_data)
temp.close()
os.rename(tempname, data_file_name)
Il problema è che tempfile.NamedTemporaryFile()
rende il file temporaneo nella /tmp
che è un file system diverso. Ciò significa che os.rename()
non riesce. Se uso shlib.move()
invece poi non ho l'aggiornamento atomica che "mv" prevede (per i file nello stesso file system, bla, bla, ecc)
So tempfile.NamedTemporaryFile()
prende un parametro "dir", ma data_file_name potrebbe essere "foo.txt" nel qual caso dir = '.'; o data_file_name potrebbe essere "/path/to/the/data/foo.txt
" nel qual caso dir = "/path/to/the/data
".
Quello che mi piacerebbe davvero è che il file temp sia data_file_name + "alcuni dati casuali". Ciò avrebbe il vantaggio di fallire in un modo che lascerebbe indizi utili.
Suggerimenti?
Perché si sta utilizzando un file temporaneo in primo luogo, se non si desidera che venga inserito nella directory per i file temporanei? Cosa non va contro l'utilizzo di file ordinari? –
David: Voglio usare un file temporaneo perché voglio che l'aggiornamento sia atomico (o atomico come uno può essere con os.rename()). Cioè, se il file system si riempie o c'è qualche altro problema, non voglio che il file sia scritto a metà. – TomOnTime
Bene, questo potrebbe essere difficile da raggiungere, poiché non si sa mai veramente, se i file scritti in una cartella diversa si trovano sullo stesso file system della directory locale. Vedo il vantaggio di organizzare il tuo output in una sorta di commit. Per essere relativamente sicuro che questo è il caso, probabilmente gestirò la mia directory temporanea - anche se poi ti occuperesti anche della pulizia di questa cartella. –