复制 python 中的文件并检查重复项

copying files in python with check for duplicates

我是这个 python 的新手,正在尝试编写一个程序以递归方式将文件夹结构中的 jpg 文件复制到新文件夹,并在文件名重复时更改文件名。

srcDir = 'Users/photos/2008/thumbnails/' #files in two more dir deep 
toDir = 'Users/external_drive/2008/'

shutil.copy(srcDir,toDir)
if filename = filename
    filename + '_2.jpg'

以下脚本应该可以满足您的需要。它使用 os.walk 遍历所有文件夹以查找扩展名为 .jpg 的文件。如果 toDir 中已经存在文件名,它会不断递增文件计数器,直到找到一个空槽,并显示所有副本的日志:

import os, shutil

srcDir = 'Users/photos/2008/thumbnails/' #files in two more dir deep 
toDir = 'Users/external_drive/2008/'

try:
    os.makedirs(toDir)
except:
    pass

for root, dirs, files in os.walk(srcDir, topdown=True):
    for file in files:
        src = os.path.join(root, file)
        target = os.path.join(toDir, file)

        if file.lower().endswith('.jpg'):
            index = 1

            while os.path.exists(target):
                index +=1
                target = os.path.join(toDir, os.path.splitext(file)[0]+ "_%d.jpg" % index)

            print "Copying: '%s'  to  '%s'" % (src, target)
            shutil.copy(src, target)

请注意您的代码中存在一些错误:

  • =是python中的赋值; == 检查相等性
  • shutil.copy() 需要文件而不是目录作为源

要遍历 python 中的目录树,你可以看看这个不错的 tutorial

要检查文件是否存在,请查看此 Whosebug question