Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中复制(复制)文件_Python_File_Copy_Shutil - Fatal编程技术网

在python中复制(复制)文件

在python中复制(复制)文件,python,file,copy,shutil,Python,File,Copy,Shutil,我想将所有文件从两个目录复制到另一个目录,但是当文件具有相同的名称时,它们会在目标目录中复制一次(由一个目录复制,而不是同时由两个目录复制) 代码如下: 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_nam

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

代码如下:

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

但什么是预期行为?如果两个文件具有相同的名称,那么复制它们只会用第二个文件覆盖第一个文件,并且不会以不同的方式结束。您必须提出某种名称,例如,如果存在一个文件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,如果出现重复,只需将结果名称更改为文件名。重复

我认为第二个函数调用会覆盖具有相同名称的文件。