В Python создать временный файл в том же каталоге, что и другой файл?

Мне нужно обновить файл. Читаю и записываю с изменениями. Однако я бы предпочел записать во временный файл и переименовать его на место.

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 + "некоторые случайные данные". Это будет иметь преимущество в том, что при неудаче останутся полезные подсказки.

Есть предложения?

14
задан bgporter 5 January 2012 в 15:56
поделиться