1

我会自动生成文件名,我不希望有覆盖。我正在懒洋洋地使用这一行代码

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

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

4

1 回答 1

2

tempfile.mkstemp只保证创建和打开一个名称不存在的新文件。从文档

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

并且 O_EXCL 标志指定:

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

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

于 2012-10-27T16:18:31.100 回答