Windows系统中用Python Shutil拷贝文件夹并保持目录结构的方法([Errno 13] Permission denied的解决办法)

这个博客的目的很简单,希望用Shutil实现目录拷贝,并且在目标文件夹中保持源文件夹中的目录结构,但是如果直接用:

shutil.copy(source_dir,des_dir)

这种写法,可能会报:PermissionError: [Errno 13] Permission denied,这种错误(像其他网友也讨论了这种情况:https://stackoverflow.com/questions/39844123/permissionerror-errno-13-permission-denied-python)。那么我们需要一种更可靠稳定的方法(虽然可以用os.system来运行windows系统命令,但毕竟用shutil可以实现更多更丰富的功能),所以下面的代码提供一种可靠的拷贝方法,方便大家使用和参考:

import shutil
import os

source_dir='源文件夹'
des_dir='目标文件夹'

if(os.path.exists(des_dir)):
    shutil.rmtree(des_dir)
os.mkdir(des_dir)

for dirpath, dirnames, filenames in os.walk(source_dir):
    for each_file in filenames:
        path=os.path.join(dirpath,each_file)
        relative_path=path[path.index(source_dir)+len(source_dir)+1:path.rindex('\\')]
        dirs=relative_path.split('\\')
        for i in range(0,len(dirs)):
            this_dir="/"
            for j in range(0,i+1):
                this_dir=this_dir+dirs[j]+'/'
            if(not os.path.exists(des_dir+this_dir)):
                os.mkdir(des_dir+this_dir)
        shutil.copyfile(path, des_dir+'/'+relative_path+'/'+each_file)

 

你可能感兴趣的:(科研工具,Python技巧)