【问题标题】:copy (duplicate) files in python在python中复制(复制)文件
【发布时间】:2023-05-17 07:53:02
【问题描述】:

我想将所有文件从 2 个目录复制到另一个目录,但是当文件具有相同名称时,它们会在目标目录中复制一次(通过一个目录。而不是两个目录)。

代码如下:

def cp_files_tmp(src, dest):#copy dir's files into a  dir
    src_files = os.listdir(src)
    for file_name in src_files:
        full_file_name = os.path.join(src, file_name)
        if (os.path.isfile(full_file_name)):
            shutil.copy(full_file_name, dest)

dest = 'C:/temp/'
src_A= 'C:/sil/in/'     
src_B= 'C:/olw/in/'

cp_files_tmp(src_A, dest) # cp files
cp_files_tmp(src_B, dest) # cp files

【问题讨论】:

  • 我认为第二个函数调用会覆盖同名文件。

标签: python file copy shutil


【解决方案1】:

但是什么是预期的行为?如果两个文件具有相同的名称,那么复制它们只会用第二个覆盖第一个文件,并且不会以不同的方式结束。您必须提出某种名称统一,例如,如果文件 X 存在,则将第二个 X 复制为 X.tmp 或类似的东西。

def cp_files_tmp(src, dest):
    src_files = os.listdir(src)
    for file_name in src_files:
        full_file_name = os.path.join(src, file_name)
        full_destination=os.path.join(dest,file_name)
        if (os.path.isfile(full_file_name)):
            while os.path.exists(full_destination):
                full_destination += ".duplicate"
            shutil.copy(full_file_name, full_destination)

dest = 'C:/temp/'
src_A= 'C:/sil/in/'     
src_B= 'C:/olw/in/'

cp_files_tmp(src_A, dest) # cp files
cp_files_tmp(src_B, dest) # cp files

这会导致文件从 C:/sil/in 和 C:/olw/in 复制到 C:/temp,如果出现重复,只需将生成的名称更改为 FILE_NAME.duplicate

【讨论】: