我需要更新一个文件。我读入它,进行更改后写出来。然而,我更愿意把更改后的内容写入到一个临时文件中,再将其重命名为原文件。
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
提供的原子更新(对于相同文件系统中的文件,等等)。
我知道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 + "some random data"
。 这将有助于以留下有用线索的方式失败。
有什么建议吗?