在 2016 年的一篇博文中,声称:
def notActuallySafeCopy(srcfile, destfile):
if os.path.exists(destfile):
raise IOError('destination already exists')
shutil.copy(srcfile, destfile)
这里存在一个竞争条件——签入后有一个短暂的时间窗口,如果在“destfile”创建文件,它将被替换。
...Python 文档明确指出,shutil.copy 和 Shutil.copy2 可以默默地覆盖目标文件(如果目标文件已存在),并且没有标志可以阻止这种情况。
这仍然是真的吗? Python 是否提供了一种复制文件而不覆盖目标文件的方法?
使用
x
模式打开目标,如果文件已存在,则失败。
def safe_copy(srcfile, destfile):
with open(srcfile, "rb") as src, open(destfile, "wxb") as dest:
dest.write(src.read())
开仓
destfile
会升高FileExistsError
。请参阅python3开启“x”模式是做什么的?