Мне нужно обновить файл. Читаю и выписываю с изменениями. Однако я бы предпочел записать во временный файл и переименовать его на место.
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", но data_file_name может быть "foo.txt", и в этом случае dir='.'; или data_file_name может быть "/path/to/the/data/foo.txt
", и в этом случае dir="/path/to/the/data
".
Мне бы очень хотелось, чтобы временный файл был data_file_name + «некоторые случайные данные». Преимущество этого было бы в том, что он потерпел бы неудачу, оставив после себя полезные подсказки.
Предложения?