Мне нужно обновить файл. Читаю и записываю с изменениями. Однако я бы предпочел записать во временный файл и переименовать его на место.
temp = tempfile.NamedTemporaryFile()
tempname = temp.name
temp.write(new_data)
temp.close()
os.rename(tempname, data_file_name)
Проблема в том, что tempfile.NamedTemporaryFile ()
создает временный файл в / tmp
, который представляет собой другую файловую систему. Это означает, что os.rename ()
не работает. Если вместо этого я использую shlib.move ()
, то у меня не будет атомарного обновления, которое предоставляет mv (для файлов в той же файловой системе, yadda, yadda и т. Д.)
Я знаю tempfile.NamedTemporaryFile ()
принимает параметр «dir», но имя_файла_данных может быть «foo.txt», и в этом случае dir = '.'; или имя_файла_данных может быть " /path/to/the/data/foo.txt
", в этом случае dir = " / path / to / the / data
".
Что мне действительно нужно, так это чтобы временный файл был data_file_name + "некоторые случайные данные". Это будет иметь преимущество в том, что при неудаче останутся полезные подсказки.
Есть предложения?