python的tempfile.mkstemp总是会产生一个唯一的名字吗?

时间:2012-10-27 15:19:23

标签: python file

我自动生成文件名,我不希望有覆盖。我懒得使用这一小段代码

fd, filepath = tempfile.mkstemp(ext, prefix='odt_img_', dir=self.destPath)
os.close(fd) # just using the name and overwriting later

后来我写了文件路径,但我不确定mkstemp是否只是添加了一些随机字母,或者它是否确实确保名称是唯一的。

1 个答案:

答案 0 :(得分:2)

tempfile.mkstemp 仅保证创建和打开名称不存在的新文件。来自docs

  

以最安全的方式创建临时文件。假设平台正确实现os.open()的os.O_EXCL标志,文件创建中没有竞争条件。

和O_EXCL标志指定:

  

确保此调用创建文件:如果此标志与O_CREAT一起指定,并且文件名已存在,则open()将失败。

在内部,mkstemp只是循环遍历一个随机序列,尝试创建一个不存在的文件,直到它成功或用完“想法”,在这种情况下它会因IOError而失败。