如果已经存在,如何创建文件并抛出异常

时间:2013-07-01 18:14:35

标签: python python-2.7

在我的程序中,如果文件当前不存在,许多进程可以尝试创建文件。 现在我想确保只有一个进程能够创建文件,如果已经创建了其余的进程,则会得到一个异常(过程安全和线程安全的open()实现)。 我怎么能在python中实现这一点。

为了清楚起见,我想要的是如果文件不存在则创建该文件。但如果它已经存在则抛出异常。这一切都应该在原子上发生。

2 个答案:

答案 0 :(得分:7)

在Python 2.x中:

import os

fd = os.open('filename', os.O_CREAT|os.O_EXCL)
with os.fdopen(fd, 'w') as f:
    ....

在Python 3.3 +中:

with open('filename', 'x') as f:
    ....

答案 1 :(得分:4)

如果您在类Unix系统上运行,请打开如下文件:

f = os.fdopen(os.open(filename, os.O_CREAT | os.O_WRONLY | os.O_EXCL), 'w')

O_EXCL的{​​{1}}标志确保仅在文件尚不存在时才创建(并打开),否则将引发os.open异常。存在检查和创建将以原子方式执行,因此您可以让多个线程或进程竞争创建文件,只有一个会成功。