我自动生成文件名,我不希望有覆盖。我懒得使用这一小段代码
fd, filepath = tempfile.mkstemp(ext, prefix='odt_img_', dir=self.destPath)
os.close(fd) # just using the name and overwriting later
后来我写了文件路径,但我不确定mkstemp是否只是添加了一些随机字母,或者它是否确实确保名称是唯一的。
答案 0 :(得分:2)
tempfile.mkstemp 仅保证创建和打开名称不存在的新文件。来自docs:
以最安全的方式创建临时文件。假设平台正确实现os.open()的os.O_EXCL标志,文件创建中没有竞争条件。
和O_EXCL标志指定:
确保此调用创建文件:如果此标志与O_CREAT一起指定,并且文件名已存在,则open()将失败。
在内部,mkstemp只是循环遍历一个随机序列,尝试创建一个不存在的文件,直到它成功或用完“想法”,在这种情况下它会因IOError而失败。