在python中复制文件并检查重复

时间:2015-07-30 17:09:20

标签: python recursion copy duplicates shutil

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

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'

2 个答案:

答案 0 :(得分:1)

以下脚本应该可以满足您的需求。它使用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)

答案 1 :(得分:0)

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

  • =是python中的一项任务; ==检查是否相等
  • shutil.copy()期望一个文件而不是目录作为源

要在python中遍历目录树,你可以看看这个漂亮的tutorial

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