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 に答える