【问题标题】:Python Shutil.copy if I have a duplicate file will it copy to new locationPython Shutil.copy 如果我有重复文件,它将复制到新位置
【发布时间】:2015-10-22 13:48:54
【问题描述】:

我正在使用 python 中的shutil.copy 方法。

我找到了下面列出的定义:

def copyFile(src, dest):
    try:
        shutil.copy(src, dest)
    # eg. src and dest are the same file
    except shutil.Error as e:
        print('Error: %s' % e)
    # eg. source or destination doesn't exist
    except IOError as e:
         print('Error: %s' % e.strerror)

我正在循环内访问定义。该循环基于每次更改的字符串。代码查看目录中的所有文件,如果在文件中看到部分字符串,则将其复制到新位置

我很确定会有重复的文件。所以我想知道会发生什么。

它们会被复制,还是会失败?

【问题讨论】:

    标签: python shutil


    【解决方案1】:

    shutil.copy 不会将文件复制到新位置,它会覆盖文件。

    将文件 src 复制到文件或目录 dst。如果 dst 是一个目录, 创建(或覆盖)与 src 具有相同基本名称的文件 指定的目录。许可位被复制。 src 和 dst 是 以字符串形式给出的路径名。

    因此,您必须自行检查目标文件是否存在并根据需要更改目标。例如,您可以使用以下方法来实现安全复制:

    def safe_copy(file_path, out_dir, dst = None):
        """Safely copy a file to the specified directory. If a file with the same name already 
        exists, the copied file name is altered to preserve both.
    
        :param str file_path: Path to the file to copy.
        :param str out_dir: Directory to copy the file into.
        :param str dst: New name for the copied file. If None, use the name of the original
            file.
        """
        name = dst or os.path.basename(file_path)
        if not os.path.exists(os.path.join(out_dir, name)):
            shutil.copy(file_path, os.path.join(out_dir, name))
        else:
            base, extension = os.path.splitext(name)
            i = 1
            while os.path.exists(os.path.join(out_dir, '{}_{}{}'.format(base, i, extension))):
                i += 1
            shutil.copy(file_path, os.path.join(out_dir, '{}_{}{}'.format(base, i, extension)))
    

    在这里,'_number' 插入到扩展名之前,以生成唯一的目标名称以防重复。喜欢'foo_1.txt'

    【讨论】:

    • 谢谢,我实际上对拥有许多相同版本的东西并不感兴趣。所以我写了一个存在声明,这似乎很好用。谢谢你的输入
    猜你喜欢
    • 2018-12-29
    • 2020-06-08
    • 1970-01-01
    • 2012-04-19
    • 2012-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多