如何编写python脚本来复制文件而不复制已有的文件?

时间:2013-08-01 14:00:55

标签: python copy python-2.5

我是业余爱好者,所以请耐心等待。所以这就是我需要的东西。我需要将文件从一个文件夹移动到另一个文件夹。在目标文件夹中,新文件将手动排序。这个脚本将通过pycron(一个Windows服务)每五分钟运行一次。我需要知道如何编写这个脚本,以便它不会复制已有的东西。我是否必须创建一个额外的文件来跟踪它?

谢谢大家的帮助!

编辑:如果它可以兼容python 2.5,那就太棒了。

1 个答案:

答案 0 :(得分:2)

这是一个准系统代码,如果它们在目录中具有相同的结构,它们将同步两个目录。

import shutil
import os
#Assuming your folders are identical for synchronization purposes
root_src_dir = "Path\To\Source"
root_dst_dir = "Path\To\Dest"
for src_dir, dirs, files in os.walk(root_src_dir):
    dst_dir = src_dir.replace(root_src_dir, root_dst_dir)
    if not os.path.exists(dst_dir):
        os.mkdir(dst_dir)
    for file_ in files:
        src_file = os.path.join(src_dir, file_)
        #dst_file = os.path.join(dst_dir, file_)
        #Decides whether or not to replace files in the destination
        if os.path.exists(os.path.join(root_dst_dir,dst_file)): #EDIT HERE.
            continue
        else:
            print "Copying", dst_file
            shutil.copy(src_file,os.path.join(root_dst_dir,dst_file)) #EDIT HERE

这将自动创建源目录的“副本”到目标目录。它将创建缺少的子目录,并仅在目标中尚不存在该文件时将这些特定位置中的文件复制到目标目录。

如果你想确保文件是否是同一文件,那么你可能想要查看filecmp或哈希(下面)以检查你之前是否复制了文件。

import hashlib
def cmpHash(file1,file2):
    """ Compares two files' hashes to determine duplicates. This doesn't work out so well, possibly due to different metadata"""
    hash1 = open(file1,'r').read()
    hash2 = open(file2,'r').read()
    #returns true if the files are the same - otherwise, false.
    return  hashlib.sha512(file1).hexdigest() == hashlib.sha512(file2).hexdigest()

示例:(编辑后不再为真。)

DriveA:\SomeDirectory\SourceDirectory\-Stuff-
DriveB:\DestDirectory\-Stuff-
#All -Stuff- from the SourceDirectory will be copied to DestDirectory, regardless of directories infront of Source/Dest Directory