Python 3 可以复制文件而不覆盖吗?

问题描述 投票:0回答:1

在 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 是否提供了一种复制文件而不覆盖目标文件的方法?

python python-3.x file copy race-condition
1个回答
0
投票

使用

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”模式是做什么的?

© www.soinside.com 2019 - 2024. All rights reserved.