【问题标题】:Moving files and dir, even if they already exist in dest移动文件和目录,即使它们已经存在于 dest
【发布时间】:2011-05-12 19:21:38
【问题描述】:

所以我想将一些文件和目录从一个位置复制到另一个位置。使用shutil.move 很容易,但是当文件或目录已经在目标中时我遇到了问题。我得到的错误是Destination path '...' already exists

我尝试了os.rename,但也没有产生预期的结果。 是否有一种简单的方法可以将文件和目录结构复制到另一个位置,即使这些文件和目录结构已经存在于 dest 中?

这是我现在拥有的:

fileList = os.listdir('/Users/john.leschinski/Desktop/testSrc')  
dest = '/Users/john.leschinski/Desktop/testMove'  
for i in fileList:  
    src = '/Users/john.leschinski/Desktop/testSrc/' + i  
    shutil.move(src,dest)

【问题讨论】:

    标签: python move shutil


    【解决方案1】:

    怎么样:

    def move_over(src_dir, dest_dir):
        fileList = os.listdir(src_dir)
        for i in fileList:
            src = os.path.join(src_dir, i)
            dest = os.path.join(dest_dir, i)
            if os.path.exists(dest):
                if os.path.isdir(dest):
                    move_over(src, dest)
                    continue
                else:
                    os.remove(dest)
            shutil.move(src, dest_dir)
    
    src_dir = '/Users/john.leschinski/Desktop/testSrc'
    dest_dir = '/Users/john.leschinski/Desktop/testMove'
    move_over(src_dir, dest_dir)
    

    【讨论】:

    • 我得到 os.remove(dest) OSError: [Errno 1] Operation not allowed
    • 也许您没有删除权限?或者,该文件可能已被另一个进程打开。顺便说一句,您使用哪个操作系统?操作系统?
    • 在 OSX 10.6.7 上,不要认为该文件夹已打开或正在使用中。另外,这看起来会删除文件的整个目录,不是吗?如果我有其他文件没有被复制但需要保留在目标中,那么这将删除它们正确吗?
    • 不,它不会删除整个目录,因为dest(不是dest_dir)直接指向文件。
    • 顺便说一句,如果dest 是一个目录,那么你会得到一个错误。也许你错了代码?更可能您要复制的目录包含dest_dir中也存在的一些子目录?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2020-10-31
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多