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