Necesito actualizar un archivo. Lo leí y lo escribí con los cambios. Sin embargo, preferiría escribir en un archivo temporal y cambiarle el nombre.En python, crea un archivo temporal en el mismo directorio que otro archivo?
temp = tempfile.NamedTemporaryFile()
tempname = temp.name
temp.write(new_data)
temp.close()
os.rename(tempname, data_file_name)
El problema es que tempfile.NamedTemporaryFile()
hace que el archivo temporal en /tmp
que es un sistema de archivos diferente. Esto significa que os.rename()
falla. Si uso shlib.move()
entonces no tengo la actualización atómica que "mv" ofrece (para archivos en el mismo sistema de archivos, bla, bla, etc.)
Sé tempfile.NamedTemporaryFile()
toma un parámetro "dir", pero data_file_name podría ser "foo.txt" en cuyo caso dir = '.'; o data_file_name podría ser "/path/to/the/data/foo.txt
" en cuyo caso dir = "/path/to/the/data
".
Lo que realmente me gustaría es que el archivo temporal sea data_file_name + "algunos datos aleatorios". Esto tendría el beneficio de fallar de una manera que dejaría pistas útiles.
Sugerencias?
¿Por qué está utilizando un archivo temporal en primer lugar, si no desea que se ponga en el directorio de archivos temporales? ¿Qué habla en contra de usar archivos ordinarios? –
David: Quiero usar un archivo temporal porque quiero que la actualización sea atómica (o tan atómica como pueda ser con os.rename()). Es decir, si el sistema de archivos se llena o hay algún otro problema, no quiero que el archivo esté medio escrito. – TomOnTime
Bueno, esto podría ser difícil de lograr, ya que nunca se sabe realmente, si los archivos escritos en una carpeta diferente están en el mismo sistema de archivos que su directorio local. Veo la ventaja de organizar su salida en algún tipo de compromiso. Para estar relativamente seguro de que este es el caso, probablemente gestionaría mi propio directorio temporal, aunque también se ocuparía de la limpieza de esta carpeta. –