2012-10-27 73 views
1

我自動生成文件名,我不希望有覆蓋。我懶洋洋地使用的代碼python的tempfile.mkstemp是否總是產生一個唯一的名字?

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

這個小行後來我寫的文件路徑,但我不知道,如果mkstemp只是增加了一些隨機的字母或者如果它實際上可以確保名稱是唯一的。

回答

2

tempfile.mkstemp只保證創建並打開一個名稱不存在的新文件。來自docs

以儘可能最安全的方式創建臨時文件。假設該平臺正確地爲os.open()實現了os.O_EXCL標誌,那麼在創建文件時沒有競爭條件。

和O_EXCL標誌指定:

確保這個調用創建文件:如果與O_CREAT一起指定此標誌,並且文件名已經存在,則open()將失敗。

在內部,mkstemp只是通過一個隨機序列循環,試圖創建一個文件,直到它成功或用完「想法」,在這種情況下,它會失敗與IOError不存在。

相關問題